osi-wakeup-return-zero-on-doing-a-wakeup-20021008
authorDerrick Brashear <shadow@dementia.org>
Wed, 9 Oct 2002 01:54:48 +0000 (01:54 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 9 Oct 2002 01:54:48 +0000 (01:54 +0000)
based on patch submitted by reuter@rzg.mpg.de, but i actually ported it
to all platforms.

13 files changed:
src/afs/AIX/osi_sleep.c
src/afs/DARWIN/osi_sleep.c
src/afs/DUX/osi_sleep.c
src/afs/FBSD/osi_sleep.c
src/afs/HPUX/osi_machdep.h
src/afs/HPUX/osi_sleep.c
src/afs/IRIX/osi_sleep.c
src/afs/LINUX/osi_sleep.c
src/afs/NBSD/osi_sleep.c
src/afs/SOLARIS/osi_sleep.c
src/afs/afs_dcache.c
src/afs/afs_prototypes.h
src/rx/rx_kernel.h

index 32f5ca8..1f225cf 100644 (file)
@@ -200,14 +200,17 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=1;
     struct afs_event *evp;
 
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
        e_wakeup(&evp->cond);
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index de04445..c0f881c 100644 (file)
@@ -199,10 +199,11 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
     struct afs_event *evp;
-    
+    int ret=1;
+
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
@@ -212,6 +213,8 @@ void afs_osi_Wakeup(void *event)
 #else
        thread_wakeup((event_t)event);
 #endif
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index 41718a1..f90b598 100644 (file)
@@ -178,14 +178,17 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=1;
     struct afs_event *evp;
-
+    
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
        thread_wakeup((vm_offset_t)(&evp->cond));
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index 8e8d861..60a3f9b 100644 (file)
@@ -180,14 +180,17 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=1;
     struct afs_event *evp;
 
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
        wakeup(event);
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index 24f1fef..60853ae 100644 (file)
@@ -83,7 +83,6 @@ extern void       afsHashRelease(tid_t key);
  */
 
 #define        afs_osi_Sleep(x)        sleep((caddr_t) x,PZERO-2)
-#define        afs_osi_Wakeup(x)       wakeup((caddr_t) x)
 #define        osi_NullHandle(x)       ((x)->proc == (caddr_t) 0)
 
 extern caddr_t kmem_alloc();
index 16828d0..22394bf 100644 (file)
@@ -112,3 +112,9 @@ int afs_osi_SleepSig(void *event)
     afs_osi_Sleep(event);
     return 0;
 }
+
+int afs_osi_Wakeup(void *event)
+{
+    wakeup((caddr_t) event);
+    return 0;
+}
index 5e791fb..12bfbfa 100644 (file)
@@ -183,14 +183,17 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=1;
     struct afs_event *evp;
 
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
        cv_broadcast(&evp->cond);
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index f3de7c5..3ac172e 100644 (file)
@@ -271,17 +271,20 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=2;
     struct afs_event *evp;
 
     evp = afs_getevent(event);
     if (!evp)                          /* No sleepers */
-       return;
+       return 1;
 
     if (evp->refcount > 1) {
        evp->seq++;    
        wake_up(&evp->cond);
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index 503373a..a22ff85 100644 (file)
@@ -178,14 +178,17 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=1;
     struct afs_event *evp;
 
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
        thread_wakeup((vm_offset_t)(&evp->cond));
+       ret=0;
     }
     relevent(evp);
+    return ret;
 }
index 7f83ccc..5ea0c59 100644 (file)
@@ -185,14 +185,17 @@ static int osi_TimedSleep(char *event, afs_int32 ams, int aintok)
 }
 
 
-void afs_osi_Wakeup(void *event)
+int afs_osi_Wakeup(void *event)
 {
+    int ret=1;
     struct afs_event *evp;
 
     evp = afs_getevent(event);
     if (evp->refcount > 1) {
        evp->seq++;    
        cv_broadcast(&evp->cond);
+       ret=0;
     }
     relevent(evp);
+    return 0;
 }
index 4958865..0499a9d 100644 (file)
@@ -1405,16 +1405,12 @@ static int afs_UFSCacheFetchProc(register struct rx_call *acall,
            abase += tlen;
            length -= tlen;
            adc->validPos = abase;
-#ifdef AFS_AIX_ENV         
            if (afs_osi_Wakeup(&adc->validPos) == 0)
                afs_Trace4(afs_iclSetp, CM_TRACE_DCACHEWAKE,
                           ICL_TYPE_STRING, __FILE__,
                           ICL_TYPE_INT32, __LINE__,
                           ICL_TYPE_POINTER, adc,
                           ICL_TYPE_INT32, adc->dflags);
-#else
-           afs_osi_Wakeup(&adc->validPos);
-#endif
        }
     } while (moredata);
     osi_FreeLargeSpace(tbuffer);
@@ -2024,16 +2020,12 @@ RetryLookup:
        tdc->validPos = Position;       /*  which is AFS_CHUNKBASE(abyte) */
        if (tdc->mflags & DFFetchReq) {
            tdc->mflags &= ~DFFetchReq;
-#ifdef AFS_AIX_ENV
            if (afs_osi_Wakeup(&tdc->validPos) == 0)
                afs_Trace4(afs_iclSetp, CM_TRACE_DCACHEWAKE,
                       ICL_TYPE_STRING, __FILE__,
                       ICL_TYPE_INT32, __LINE__,
                       ICL_TYPE_POINTER, tdc,
                       ICL_TYPE_INT32, tdc->dflags);
-#else
-           afs_osi_Wakeup(&tdc->validPos);
-#endif
        }
        tsmall = (struct tlocal1 *) osi_AllocLargeSpace(sizeof(struct tlocal1));
        setVcacheStatus = 0;
@@ -2339,16 +2331,12 @@ RetryLookup:
 #endif /* AFS_NOSTATS */
 
        tdc->dflags &= ~DFFetching;
-#ifdef AFS_AIX_ENV
        if (afs_osi_Wakeup(&tdc->validPos) == 0)
            afs_Trace4(afs_iclSetp, CM_TRACE_DCACHEWAKE,
                       ICL_TYPE_STRING, __FILE__,
                       ICL_TYPE_INT32, __LINE__,
                       ICL_TYPE_POINTER, tdc,
                       ICL_TYPE_INT32, tdc->dflags);
-#else
-           afs_osi_Wakeup(&tdc->validPos);
-#endif
        if (avc->execsOrWriters == 0) tdc->f.states &= ~DWriting;
 
        /* now, if code != 0, we have an error and should punt.
index 79ff4a1..fc763f4 100644 (file)
@@ -456,7 +456,7 @@ extern void afs_osi_InitWaitHandle(struct afs_osi_WaitHandle *achandle);
 extern void afs_osi_CancelWait(struct afs_osi_WaitHandle *achandle);
 extern int afs_osi_Wait(afs_int32 ams, struct afs_osi_WaitHandle *ahandle, int aintok);
 #ifndef afs_osi_Wakeup
-extern void afs_osi_Wakeup(void *event);
+extern int afs_osi_Wakeup(void *event);
 #endif
 #ifndef afs_osi_Sleep
 extern void afs_osi_Sleep(void *event);
index d0843d3..e8e4e52 100644 (file)
@@ -25,27 +25,13 @@ typedef struct socket *osi_socket;
 #define        OSI_NULLSOCKET  ((osi_socket) 0)
 
 #if (!defined(AFS_GLOBAL_SUNLOCK) && !defined(RX_ENABLE_LOCKS))
-#define RX_KERNEL_TRACE 1
-#ifdef RX_KERNEL_TRACE
 #include "../afs/icl.h"
 #include "../afs/afs_trace.h"
-#ifdef AFS_AIX_ENV
+#endif
 #define osi_rxSleep(a)  afs_Trace2(afs_iclSetp, CM_TRACE_RXSLEEP, \
         ICL_TYPE_STRING, __FILE__, ICL_TYPE_INT32, __LINE__); afs_osi_Sleep(a)
 #define osi_rxWakeup(a) if (afs_osi_Wakeup(a) == 0) afs_Trace2(afs_iclSetp, \
         CM_TRACE_RXWAKE, ICL_TYPE_STRING, __FILE__, ICL_TYPE_INT32, __LINE__)
-#else
-#define osi_rxSleep(a)  afs_osi_Sleep(a)
-#define osi_rxWakeup(a) afs_osi_Wakeup(a)
-#endif
-#else /* RX_KERNEL_TRACE */
-#define        osi_rxSleep(a)  afs_osi_Sleep(a)
-#define        osi_rxWakeup(a) afs_osi_Wakeup(a)
-#endif /* RX_KERNEL_TRACE */
-#else /* AFS_GLOBAL_SUNLOCK || RX_ENABLE_LOCKS */
-#define        osi_rxSleep(a)  afs_osi_Sleep(a)
-#define        osi_rxWakeup(a) afs_osi_Wakeup(a)
-#endif
 
 extern int osi_utoa(char *buf, size_t len, unsigned long val);
 #define osi_Assert(e) (void)((e) || (osi_AssertFailK(#e, __FILE__, __LINE__), 0))