SCCS-vsn: sys/kern/kern_clock.c 4.28
SCCS-vsn: sys/kern/uipc_mbuf.c 1.21
SCCS-vsn: sys/kern/uipc_proto.c 4.11
SCCS-vsn: sys/kern/uipc_socket.c 4.17
SCCS-vsn: sys/kern/uipc_socket2.c 4.14
-/* kern_clock.c 4.27 81/11/20 */
+/* kern_clock.c 4.28 81/12/12 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/mtpr.h"
#include "../h/clock.h"
#include "../h/cpu.h"
#include "../h/mtpr.h"
#include "../h/clock.h"
#include "../h/cpu.h"
+#include "../h/protosw.h"
#include "bk.h"
#include "dh.h"
#include "bk.h"
#include "dh.h"
int kcounts[20000];
#endif
int kcounts[20000];
#endif
+/*
+ * Protoslow is like lbolt, but for slow protocol timeouts, counting
+ * up to (hz/PR_SLOWHZ), then causing a pfslowtimo().
+ * Protofast is like lbolt, but for fast protocol timeouts, counting
+ * up to (hz/PR_FASTHZ), then causing a pffasttimo().
+ */
+int protoslow;
+int protofast;
+
/*ARGSUSED*/
hardclock(pc, ps)
caddr_t pc;
/*ARGSUSED*/
hardclock(pc, ps)
caddr_t pc;
* Time moves on.
*/
++lbolt;
* Time moves on.
*/
++lbolt;
+
+ /*
+ * Time moves on for protocols.
+ */
+ ++protoslow; ++protofast;
+
#if VAX780
/*
* On 780's, impelement a fast UBA watcher,
#if VAX780
/*
* On 780's, impelement a fast UBA watcher,
+ /*
+ * Run network slow and fast timeouts.
+ */
+ if (protofast >= hz / PR_FASTHZ)
+ pffasttimo();
+ if (protofast >= hz / PR_SLOWHZ)
+ pfslowtimo();
+
/*
* Lightning bolt every second:
* sleep timeouts
/*
* Lightning bolt every second:
* sleep timeouts
-/* uipc_mbuf.c 1.20 81/12/09 */
+/* uipc_mbuf.c 1.21 81/12/12 */
#include "../h/param.h"
#include "../h/dir.h"
#include "../h/param.h"
#include "../h/dir.h"
- register struct mbuf *m;
- register i;
COUNT(MBINIT);
if (m_reserve(32) == 0)
COUNT(MBINIT);
if (m_reserve(32) == 0)
-/* uipc_proto.c 4.10 81/12/03 */
+/* uipc_proto.c 4.11 81/12/12 */
#include "../h/param.h"
#include "../h/socket.h"
#include "../h/param.h"
#include "../h/socket.h"
return (pr);
return (0);
}
return (pr);
return (0);
}
+
+/*
+ * Slow timeout on all protocols.
+ */
+pfslowtimo()
+{
+ register struct protosw *pr;
+
+COUNT(PFSLOWTIMO);
+ for (pr = protoswLAST; pr >= protosw; pr--)
+ if (pr->pr_slowtimo)
+ (*pr->pr_slowtimo)();
+}
+
+pffasttimo()
+{
+ register struct protosw *pr;
+
+COUNT(PFSLOWTIMO);
+ for (pr = protoswLAST; pr >= protosw; pr--)
+ if (pr->pr_slowtimo)
+ (*pr->pr_slowtimo)();
+}
-/* uipc_socket.c 4.16 81/12/02 */
+/* uipc_socket.c 4.17 81/12/12 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
COUNT(SOCLOSE);
if (so->so_pcb == 0)
goto discard;
COUNT(SOCLOSE);
if (so->so_pcb == 0)
goto discard;
+printf("soclose %x state %x\n", so, so->so_state);
if (so->so_state & SS_ISCONNECTED) {
if ((so->so_state & SS_ISDISCONNECTING) == 0) {
u.u_error = sodisconnect(so, (struct sockaddr *)0);
if (u.u_error) {
if (so->so_state & SS_ISCONNECTED) {
if ((so->so_state & SS_ISDISCONNECTING) == 0) {
u.u_error = sodisconnect(so, (struct sockaddr *)0);
if (u.u_error) {
+printf("soclose disconnect error %d\n", u.u_error);
- while (so->so_state & SS_ISCONNECTED)
+ while (so->so_state & SS_ISCONNECTED) {
+printf("sleeping until not connected\n");
sleep((caddr_t)&so->so_timeo, PZERO+1);
sleep((caddr_t)&so->so_timeo, PZERO+1);
}
u.u_error = (*so->so_proto->pr_usrreq)(so, PRU_DETACH, 0, 0);
discard:
}
u.u_error = (*so->so_proto->pr_usrreq)(so, PRU_DETACH, 0, 0);
discard:
goto bad;
}
error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, 0, (caddr_t)asa);
goto bad;
}
error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, 0, (caddr_t)asa);
+printf("PRU_ACCEPT returns error %d\n", error);
bad:
splx(s);
return (error);
bad:
splx(s);
return (error);
-/* uipc_socket2.c 4.13 81/12/03 */
+/* uipc_socket2.c 4.14 81/12/12 */
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
+printf("soisconnecting %x\n", so);
so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= SS_ISCONNECTING;
wakeup((caddr_t)&so->so_timeo);
so->so_state &= ~(SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= SS_ISCONNECTING;
wakeup((caddr_t)&so->so_timeo);
+printf("soisconnected %x\n", 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);
- so->so_state &= ~(SS_ISCONNECTED|SS_ISCONNECTING);
+printf("soisdisconnecting %x\n", so);
+ so->so_state &= ~SS_ISCONNECTING;
so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
wakeup((caddr_t)&so->so_timeo);
sowwakeup(so);
so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
wakeup((caddr_t)&so->so_timeo);
sowwakeup(so);
+printf("soisdisconnected %x\n", so);
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE);
wakeup((caddr_t)&so->so_timeo);
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE);
wakeup((caddr_t)&so->so_timeo);