]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE12-darwin-afsdb-handler-signal-mask-20040728
authorPhil Holland <hollandp@umich.edu>
Mon, 18 Oct 2004 07:04:18 +0000 (07:04 +0000)
committerDerrick Brashear <shadow@dementia.org>
Mon, 18 Oct 2004 07:04:18 +0000 (07:04 +0000)
FIXES 6027

mask signals on darwin so afsdb handler doesn't die

(cherry picked from commit 9728182c00db80f61aa78e225ecaffcc4df7615c)

src/afs/DARWIN/osi_prototypes.h
src/afs/DARWIN/osi_sleep.c
src/afs/afs_call.c
src/afs/afs_osi.c

index ed68243c1814d3e8c6edfc34bb633777b5ec0b18..1cfe6727f22a2061e977a2e929f6b64ed6e26422 100644 (file)
 /* osi_misc.c */
 extern int osi_lookupname(char *aname, enum uio_seg seg, int followlink,
                          struct vnode **dirvpp, struct vnode **vpp);
+
+/* osi_sleep.c */
+extern void afs_osi_fullSigMask(void);
+extern void afs_osi_fullSigRestore(void);
 /* osi_vm.c */
 extern void osi_VM_NukePages(struct vnode *vp, off_t offset, off_t size);
 extern int osi_VM_Setup(struct vcache *avc, int force);
index ceac98d8de9e2072bd0ab30eced7782033e77330..3c365dd5a07cb7e2ae1402e79b1ba7b23e770247 100644 (file)
@@ -211,3 +211,31 @@ void afs_osi_Wakeup(char *event)
     }
     relevent(evp);
 }
+
+void 
+afs_osi_fullSigMask()
+{
+    struct uthread *user_thread = (struct uthread *)get_bsdthread_info(current_act());
+    
+    /* Protect original sigmask */
+    if (!user_thread->uu_oldmask) {
+       /* Back up current sigmask */
+       user_thread->uu_oldmask = user_thread->uu_sigmask;
+       /* Mask all signals */
+       user_thread->uu_sigmask = ~(sigset_t)0;
+    }
+}
+
+void 
+afs_osi_fullSigRestore()
+{
+    struct uthread *user_thread = (struct uthread *)get_bsdthread_info(current_act());
+    
+    /* Protect original sigmask */
+    if (user_thread->uu_oldmask) {
+       /* Restore original sigmask */
+       user_thread->uu_sigmask = user_thread->uu_oldmask;
+       /* Clear the oldmask */
+       user_thread->uu_oldmask = (sigset_t)0;
+    }
+}
index 0792f2264ce56f07325d42b66532f63a59afd70e..ca1123b8ce05e458326d562763120b3662bda4bf 100644 (file)
@@ -838,7 +838,7 @@ long parm, parm2, parm3, parm4, parm5, parm6;
        char *cellname = afs_osi_Alloc(cellLen);
 
 #ifndef UKERNEL
-       afs_osi_MaskSignals();
+       afs_osi_MaskUserLoop();
 #endif
        AFS_COPYIN((afs_int32 *)parm2, cellname, cellLen, code);
        AFS_COPYIN((afs_int32 *)parm3, kmsg, kmsgLen, code);
index 89a38d4e891c47be6a1f3651ce46716786ac0467..5200fc0f38e68bacc047d6a77d9e55e2ca382107 100644 (file)
@@ -291,6 +291,26 @@ void afs_osi_MaskSignals(){
 void afs_osi_UnmaskRxkSignals(){
 }
     
+/* Two hacks to try and fix afsdb */
+void 
+afs_osi_MaskUserLoop()
+{
+#ifdef AFS_DARWIN_ENV
+    afs_osi_Invisible();
+    afs_osi_fullSigMask();
+#else
+    afs_osi_MaskSignals();
+#endif
+}
+
+void 
+afs_osi_UnmaskUserLoop()
+{
+#ifdef AFS_DARWIN_ENV
+    afs_osi_fullSigRestore();
+#endif
+}
+
 /* register rxk listener proc info */
 void afs_osi_RxkRegister(){
 #ifdef AFS_LINUX22_ENV