Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 25 Sep 1999 07:09:36 +0000 (07:09 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 25 Sep 1999 07:09:36 +0000 (07:09 +0000)
1999-09-24  Ulrich Drepper  <drepper@cygnus.com>

* nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_grent): Do
not ovverwrite last group member with NULL pointer.
Reported by Thomas Winder <thomas.winder@newlogic.at>.

ChangeLog
linuxthreads/ChangeLog
linuxthreads/condvar.c
nis/nss_nisplus/nisplus-parser.c

index f214f15..ed49785 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+1999-09-24  Ulrich Drepper  <drepper@cygnus.com>
+
+       * nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_grent): Do
+       not ovverwrite last group member with NULL pointer.
+       Reported by Thomas Winder <thomas.winder@newlogic.at>.
+
 1999-09-24  Andreas Jaeger  <aj@suse.de>
 
        * stdio-common/tst-printf.c (main): Add a testcase for large
index 1551059..1881795 100644 (file)
@@ -1,3 +1,8 @@
+1999-09-25  Ulrich Drepper  <drepper@cygnus.com>
+
+       * condvar.c (pthread_cond_timedwait_relative): Never return with
+       EINTR.  Patch by Andreas Schwab.
+
 1999-09-19  Ulrich Drepper  <drepper@cygnus.com>
 
        * signals.c (sigaction): Correct last patch.  Don't select
index cd22a24..a27b093 100644 (file)
@@ -76,6 +76,7 @@ pthread_cond_timedwait_relative(pthread_cond_t *cond,
   enqueue(&cond->__c_waiting, self);
   __pthread_unlock(&cond->__c_lock);
   pthread_mutex_unlock(mutex);
+ continue_waiting:
   /* Set up a longjmp handler for the restart and cancel signals */
   if (sigsetjmp(jmpbuf, 1) == 0) {
     THREAD_SETMEM(self, p_signal_jmp, &jmpbuf);
@@ -113,13 +114,16 @@ pthread_cond_timedwait_relative(pthread_cond_t *cond,
     pthread_mutex_lock(mutex);
     pthread_exit(PTHREAD_CANCELED);
   }
-  /* If not signaled: also remove ourselves and return an error code */
+  /* If not signaled: also remove ourselves and return an error code, but
+     only if the timeout has elapsed.  If not, jsut continue waiting. */
   if (THREAD_GETMEM(self, p_signal) == 0) {
+    if (retsleep != 0)
+      goto continue_waiting;
     __pthread_lock(&cond->__c_lock, self);
     remove_from_queue(&cond->__c_waiting, self);
     __pthread_unlock(&cond->__c_lock);
     pthread_mutex_lock(mutex);
-    return retsleep == 0 ? ETIMEDOUT : EINTR;
+    return ETIMEDOUT;
   }
   /* Otherwise, return normally */
   pthread_mutex_lock(mutex);
index 35b8a28..e8d1079 100644 (file)
@@ -231,9 +231,9 @@ _nss_nisplus_parse_grent (nis_result *result, u_long entry, struct group *gr,
        break;
 
       if (room_left < sizeof (char *))
-         goto no_more_room;
+       goto no_more_room;
       room_left -= sizeof (char *);
-      gr->gr_mem[count] = line;
+      gr->gr_mem[count++] = line;
 
       while (*line != '\0' && *line != ',' && !isspace (*line))
        ++line;
@@ -248,13 +248,10 @@ _nss_nisplus_parse_grent (nis_result *result, u_long entry, struct group *gr,
              ++line;
          else
            ++line;
-         ++count;
        }
-      else
-       gr->gr_mem[count+1] = NULL;
     }
   if (room_left < sizeof (char *))
-      goto no_more_room;
+    goto no_more_room;
   room_left -= sizeof (char *);
   gr->gr_mem[count] = NULL;