diff options
Diffstat (limited to 'contrib/ipfilter/solaris.c')
-rw-r--r-- | contrib/ipfilter/solaris.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/contrib/ipfilter/solaris.c b/contrib/ipfilter/solaris.c index 7960786..761ce55 100644 --- a/contrib/ipfilter/solaris.c +++ b/contrib/ipfilter/solaris.c @@ -6,7 +6,7 @@ * to the original author and the contributors. */ /* #pragma ident "@(#)solaris.c 1.12 6/5/96 (C) 1995 Darren Reed"*/ -#pragma ident "@(#)$Id: solaris.c,v 2.1.2.11 1999/12/04 03:33:59 darrenr Exp $" +#pragma ident "@(#)$Id: solaris.c,v 2.1.2.14 2000/01/25 15:32:03 darrenr Exp $" #include <sys/systm.h> #include <sys/types.h> @@ -937,6 +937,8 @@ again: void ipf_synctimeout(arg) void *arg; { + if (fr_running < 0) + return; READ_ENTER(&ipf_solaris); ipfsync(); WRITE_ENTER(&ipfs_mutex); @@ -1327,8 +1329,10 @@ int ipfsync() /* * Resync. any NAT `connections' using this interface and its IP #. */ - for (il = ill_g_head; il; il = il->ill_next) + for (il = ill_g_head; il; il = il->ill_next) { ip_natsync((void *)il); + ip_statesync((void *)il); + } return 0; } @@ -1442,9 +1446,13 @@ frdest_t *fdp; * If there is another M_PROTO, we don't want it */ if (*mpp != mb) { + mp = *mpp; + (void) unlinkb(mp); + mp = (*mpp)->b_cont; (*mpp)->b_cont = NULL; (*mpp)->b_prev = NULL; freemsg(*mpp); + *mpp = mp; } ir = (ire_t *)fdp->fd_ifp; @@ -1537,6 +1545,7 @@ frdest_t *fdp; mb = mp2; } } + *mpp = mb; if (ir->ire_stq) q = ir->ire_stq; @@ -1544,6 +1553,7 @@ frdest_t *fdp; q = WR(ir->ire_rfq); if (q) { mb->b_prev = NULL; + mb->b_queue = q; RWLOCK_EXIT(&ipfs_mutex); RWLOCK_EXIT(&ipf_solaris); #if SOLARIS2 >= 6 |