linux-note-we-use-interruptible-sleeps-in-non-compliant-manner-20020731
authorDerrick Brashear <shadow@dementia.org>
Wed, 31 Jul 2002 22:54:41 +0000 (22:54 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 31 Jul 2002 22:54:41 +0000 (22:54 +0000)
based on discussion with David Howells of RedHat

src/afs/LINUX/osi_sleep.c
src/rx/LINUX/rx_kmutex.c

index 0c1e08c..ceaf569 100644 (file)
@@ -203,7 +203,13 @@ int afs_osi_SleepSig(char *event)
     return retval;
 }
 
-/* afs_osi_Sleep -- waits for an event to be notified, ignoring signals. */
+/* afs_osi_Sleep -- waits for an event to be notified, ignoring signals.
+ * - NOTE: that on Linux, there are circumstances in which TASK_INTERRUPTIBLE
+ *   can wake up, even if all signals are blocked
+ * - TODO: handle signals correctly by passing an indication back to the
+ *   caller that the wait has been interrupted and the stack should be cleaned
+ *   up preparatory to signal delivery
+ */
 void afs_osi_Sleep(char *event)
 {
     sigset_t saved_set;
index eecddc5..26d2f2f 100644 (file)
@@ -59,11 +59,13 @@ void afs_mutex_exit(afs_kmutex_t *l)
     up(&l->sem);
 }
 
-/*
- * CV_WAIT and CV_TIMEDWAIT rely on the fact that the Linux kernel has
- * a global lock. Thus we can safely drop our locks before calling the
- * kernel sleep services.
- * Or not.
+/* CV_WAIT and CV_TIMEDWAIT sleep until the specified event occurs, or, in the
+ * case of CV_TIMEDWAIT, until the specified timeout occurs.
+ * - NOTE: that on Linux, there are circumstances in which TASK_INTERRUPTIBLE
+ *   can wake up, even if all signals are blocked
+ * - TODO: handle signals correctly by passing an indication back to the
+ *   caller that the wait has been interrupted and the stack should be cleaned
+ *   up preparatory to signal delivery
  */
 int afs_cv_wait(afs_kcondvar_t *cv, afs_kmutex_t *l, int sigok)
 {