projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
getting reassembly to work
[unix-history]
/
usr
/
src
/
sys
/
kern
/
uipc_socket2.c
diff --git
a/usr/src/sys/kern/uipc_socket2.c
b/usr/src/sys/kern/uipc_socket2.c
index
e4583e3
..
dc2ec8c
100644
(file)
--- a/
usr/src/sys/kern/uipc_socket2.c
+++ b/
usr/src/sys/kern/uipc_socket2.c
@@
-1,4
+1,4
@@
-/* uipc_socket2.c 4.
18
82/01/19 */
+/* uipc_socket2.c 4.
20
82/01/19 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
@@
-53,6
+53,8
@@
soisconnected(so)
so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
so->so_state |= SS_ISCONNECTED;
wakeup((caddr_t)&so->so_timeo);
so->so_state &= ~(SS_ISCONNECTING|SS_ISDISCONNECTING);
so->so_state |= SS_ISCONNECTED;
wakeup((caddr_t)&so->so_timeo);
+ sorwakeup(so);
+ sowwakeup(so);
}
soisdisconnecting(so)
}
soisdisconnecting(so)
@@
-115,21
+117,27
@@
soselect(so, rw)
register struct socket *so;
int rw;
{
register struct socket *so;
int rw;
{
+ int s = splnet();
switch (rw) {
case FREAD:
switch (rw) {
case FREAD:
- if (soreadable(so))
+ if (soreadable(so)) {
+ splx(s);
return (1);
return (1);
+ }
sbselqueue(&so->so_rcv);
break;
case FWRITE:
sbselqueue(&so->so_rcv);
break;
case FWRITE:
- if (sowriteable(so))
+ if (sowriteable(so)) {
+ splx(s);
return (1);
return (1);
+ }
sbselqueue(&so->so_snd);
break;
}
sbselqueue(&so->so_snd);
break;
}
+ splx(s);
return (0);
}
return (0);
}
@@
-310,7
+318,7
@@
sbappendaddr(sb, asa, m0)
}
if (len > sbspace(sb))
return (0);
}
if (len > sbspace(sb))
return (0);
- m = m_get(
0
);
+ m = m_get(
M_DONTWAIT
);
if (m == 0)
return (0);
m->m_off = MMINOFF;
if (m == 0)
return (0);
m->m_off = MMINOFF;