]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-solaris10-cleanup-friendliness-20080130
authorDerrick Brashear <shadow@dementia.org>
Thu, 31 Jan 2008 20:18:51 +0000 (20:18 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 31 Jan 2008 20:18:51 +0000 (20:18 +0000)
LICENSE IPL10

based on patch from mib@unimelb.edu.au

clean up taskq after ourselves and don't leave ourself marked system processes

(cherry picked from commit 462f1fb90defcb351657655442024f971705d945)

src/afs/UKERNEL/afs_usrops.c
src/afs/afs_call.c
src/afs/afs_osi.c
src/afs/afs_prototypes.h
src/config/afs_args.h
src/rx/SOLARIS/rx_knet.c
src/rx/rx_kcommon.c

index fc49512aeb7031a2c909b5ff6ab74dd3178c3128..2137b94c3d51e11ab724bf4cabb713dab7309c8e 100644 (file)
@@ -1005,6 +1005,12 @@ afs_osi_Invisible(void)
     return;
 }
 
+void
+afs_osi_Visible(void)
+{
+    return;
+}
+
 int
 osi_GetTime(struct timeval *tv)
 {
index 0863c31490874f0f7d6c9dd0a76eacf6f0094dcd..bb62040f0db680621d34a10be80787d12ec6bc0e 100644 (file)
@@ -581,6 +581,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
 #endif /* RXK_LISTENER_ENV */
            afs_osi_Invisible();
            afs_RXCallBackServer();
+           afs_osi_Visible();
        }
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
@@ -609,6 +610,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
            afs_osi_RxkRegister();
 #endif /* !UKERNEL */
            rxk_Listener();
+           afs_osi_Visible();
        }
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
@@ -628,6 +630,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
        afs_osi_Wakeup(&afs_initState);
        afs_osi_Invisible();
        afs_Daemon();
+       afs_osi_Visible();
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
        exit(CLD_EXITED, 0);
@@ -635,6 +638,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
     } else if (parm == AFSOP_START_CS) {
        afs_osi_Invisible();
        afs_CheckServerDaemon();
+       afs_osi_Visible();
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
        exit(CLD_EXITED, 0);
@@ -654,6 +658,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
        else
 #endif /* AFS_AIX32_ENV */
            afs_BackgroundDaemon();
+       afs_osi_Visible();
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
        exit(CLD_EXITED, 0);
@@ -664,6 +669,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
        /* start the bkg daemon */
        afs_osi_Invisible();
        afs_CacheTruncateDaemon();
+       afs_osi_Visible();
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
        exit(CLD_EXITED, 0);
@@ -675,6 +681,7 @@ afs_syscall_call(parm, parm2, parm3, parm4, parm5, parm6)
            afs_osi_Sleep(&afs_initState);
        afs_osi_Invisible();
        afs_rxevent_daemon();
+       afs_osi_Visible();
 #ifdef AFS_SGI_ENV
        AFS_GUNLOCK();
        exit(CLD_EXITED, 0);
index 07326e492c319079a6338beb20532a6b21bf71bd..633c28c8eafb6c53e1037b90b741afef181f11ea 100644 (file)
@@ -308,6 +308,19 @@ afs_osi_Invisible(void)
     AFS_STATCNT(osi_Invisible);
 }
 
+void
+afs_osi_Visible(void)
+{
+#if defined(AFS_SUN5_ENV)
+    curproc->p_flag &= ~SSYS;
+#elif defined(AFS_DARWIN80_ENV)
+#elif defined(AFS_DARWIN_ENV)
+    /* maybe call init_process instead? */
+    current_proc()->p_flag &= ~P_SYSTEM;
+#elif defined(AFS_XBSD_ENV)
+    curproc->p_flag &= ~P_SYSTEM;
+#endif
+}
 
 #if !defined(AFS_LINUX20_ENV) && !defined(AFS_XBSD_ENV)
 /* set the real time */
index 83ac8ece2a855d27da09117fc003d80bba3d01a6..c49ed0db1de0936f6da5824788ac2318d14c4153 100644 (file)
@@ -471,6 +471,7 @@ extern struct afs_exporter *afs_nfsexporter;
 /* afs_osi.c */
 extern afs_lock_t afs_ftf;
 extern void afs_osi_Invisible(void);
+extern void afs_osi_Visible(void);
 extern void afs_osi_RxkRegister(void);
 extern void afs_osi_MaskSignals(void);
 extern void afs_osi_UnmaskRxkSignals(void);
index 47ce0db27be7e84df5a12571e94bbddd39dbd573..d124efce78b9b17439be29d2742f458153bdffdb 100644 (file)
 /* #define AFSOP_STOP_COMPLETE     215  defined in osi.h             */
 /* #define AFSOP_STOP_RXK_LISTENER   217     defined in osi.h        */
 #define AFSOP_STOP_AFSDB       218     /* Stop AFSDB handler */
+#define AFSOP_STOP_NETIF        219     /* Stop Netif poller */
 
 /* Main afs syscall entry; this number may vary per system (i.e. defined in afs/param.h) */
 #ifndef        AFS_SYSCALL
index c46f09b4eddb952bbf71709cd3c0baf082bc8f5c..6246fe199609218bffb281616949928b22a7aade 100644 (file)
@@ -592,6 +592,14 @@ osi_NetIfPoller()
     uint_t mtu;
     uint64_t flags;
 
+    if (afs_termState == AFSOP_STOP_NETIF) {
+       afs_warn("NetIfPoller... ");
+       rw_destroy(&afsifinfo_lock);
+       ddi_taskq_destroy(afs_taskq);
+       afs_termState = AFSOP_STOP_COMPLETE;
+       osi_rxWakeup(&afs_termState);
+       return;
+    }
     /* Get our permissions */
     cr = CRED();
 
index 4c056ff96ad5fa4609cc70565413a2f5a3f3155c..b066362671582426b2da2b6a3711766b079bbc46 100644 (file)
@@ -1092,8 +1092,12 @@ afs_rxevent_daemon(void)
        if (afs_termState == AFSOP_STOP_RXEVENT) {
 #ifdef RXK_LISTENER_ENV
            afs_termState = AFSOP_STOP_RXK_LISTENER;
+#else
+#ifdef AFS_SUN510_ENV
+           afs_termState = AFSOP_STOP_NETIF;
 #else
            afs_termState = AFSOP_STOP_COMPLETE;
+#endif
 #endif
            osi_rxWakeup(&afs_termState);
            return;
@@ -1271,7 +1275,11 @@ rxk_Listener(void)
     AFS_GLOCK();
 #endif /* RX_ENABLE_LOCKS */
     if (afs_termState == AFSOP_STOP_RXK_LISTENER) {
+#ifdef AFS_SUN510_ENV
+       afs_termState = AFSOP_STOP_NETIF;
+#else
        afs_termState = AFSOP_STOP_COMPLETE;
+#endif
        osi_rxWakeup(&afs_termState);
     }
     rxk_ListenerPid = 0;