summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-05-07 22:04:36 +0000
committerUlrich Drepper <drepper@redhat.com>2000-05-07 22:04:36 +0000
commitfc08075dc61787269743a1abb8ff8221868c3210 (patch)
tree3f30336e48d8cfde89932c00f2b3884bf70d478f
parent1336419e465c180c938652fadc2aa0b487a6e887 (diff)
downloadglibc-fc08075dc61787269743a1abb8ff8221868c3210.tar.gz
glibc-fc08075dc61787269743a1abb8ff8221868c3210.tar.xz
glibc-fc08075dc61787269743a1abb8ff8221868c3210.zip
Update.
	(ucs4_internal_loop): Likewise.
	(ucs4_internal_loop_unaligned): Likewise.
	(internal_ucs4le_loop): Likewise.
	(internal_ucs4le_loop_unaligned): Likewise.
	(ucs4le_internal_loop): Likewise.
	(ucs4le_internal_loop_unaligned): Likewise.
-rw-r--r--ChangeLog6
-rw-r--r--iconv/gconv_simple.c36
-rw-r--r--linuxthreads/ChangeLog21
3 files changed, 45 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 4557c9f2ba..9a63b24172 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,12 @@
 	* iconv/tst-iconv1.c: New file.
 	* iconv/gconv_simple.c (internal_ucs4_loop): Prefer reporting
 	empty input buffer over full output buffer.
+	(ucs4_internal_loop): Likewise.
+	(ucs4_internal_loop_unaligned): Likewise.
+	(internal_ucs4le_loop): Likewise.
+	(internal_ucs4le_loop_unaligned): Likewise.
+	(ucs4le_internal_loop): Likewise.
+	(ucs4le_internal_loop_unaligned): Likewise.
 	Reported by yaoz@nih.gov.
 
 2000-05-06  Bruno Haible  <haible@clisp.cons.org>
diff --git a/iconv/gconv_simple.c b/iconv/gconv_simple.c
index caee6f36f9..4010a6b326 100644
--- a/iconv/gconv_simple.c
+++ b/iconv/gconv_simple.c
@@ -234,10 +234,10 @@ ucs4_internal_loop (const unsigned char **inptrp, const unsigned char *inend,
   *outptrp = outptr;
 
   /* Determine the status.  */
-  if (*outptrp == outend)
-    result = __GCONV_FULL_OUTPUT;
-  else if (*inptrp == inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
+  else if (*outptrp == outend)
+    result = __GCONV_FULL_OUTPUT;
   else
     result = __GCONV_INCOMPLETE_INPUT;
 
@@ -296,10 +296,10 @@ ucs4_internal_loop_unaligned (const unsigned char **inptrp,
   *outptrp = outptr;
 
   /* Determine the status.  */
-  if (*outptrp == outend)
-    result = __GCONV_FULL_OUTPUT;
-  else if (*inptrp == inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
+  else if (*outptrp == outend)
+    result = __GCONV_FULL_OUTPUT;
   else
     result = __GCONV_INCOMPLETE_INPUT;
 
@@ -392,10 +392,10 @@ internal_ucs4le_loop (const unsigned char **inptrp, const unsigned char *inend,
 #endif
 
   /* Determine the status.  */
-  if (*outptrp == outend)
-    result = __GCONV_FULL_OUTPUT;
-  else if (*inptrp == inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
+  else if (*outptrp == outend)
+    result = __GCONV_FULL_OUTPUT;
   else
     result = __GCONV_INCOMPLETE_INPUT;
 
@@ -438,10 +438,10 @@ internal_ucs4le_loop_unaligned (const unsigned char **inptrp,
 # endif
 
   /* Determine the status.  */
-  if (*outptrp == outend)
-    result = __GCONV_FULL_OUTPUT;
-  else if (*inptrp == inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
+  else if (*outptrp == outend)
+    result = __GCONV_FULL_OUTPUT;
   else
     result = __GCONV_INCOMPLETE_INPUT;
 
@@ -531,10 +531,10 @@ ucs4le_internal_loop (const unsigned char **inptrp, const unsigned char *inend,
   *outptrp = outptr;
 
   /* Determine the status.  */
-  if (*outptrp == outend)
-    result = __GCONV_FULL_OUTPUT;
-  else if (*inptrp == inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
+  else if (*outptrp == outend)
+    result = __GCONV_FULL_OUTPUT;
   else
     result = __GCONV_INCOMPLETE_INPUT;
 
@@ -583,10 +583,10 @@ ucs4le_internal_loop_unaligned (const unsigned char **inptrp,
   *outptrp = outptr;
 
   /* Determine the status.  */
-  if (*outptrp == outend)
-    result = __GCONV_FULL_OUTPUT;
-  else if (*inptrp == inend)
+  if (*inptrp == inend)
     result = __GCONV_EMPTY_INPUT;
+  else if (*outptrp == outend)
+    result = __GCONV_FULL_OUTPUT;
   else
     result = __GCONV_INCOMPLETE_INPUT;
 
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 5c1c1e1298..8a0310dadb 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,24 @@
+2000-05-06  Kaz Kylheku  <kaz@ashi.footprints.net>
+
+	* internals.h: New thread manager request type, REQ_KICK.
+	* join.c (pthread_exit): main thread now calls exit() instead
+	of _exit() in order to proper process cleanup.
+	* manager.c (__pthread_manager): Do not terminate manager
+	after unblocking main thread; wait for main thread's
+	REQ_PROCESS_EXIT request instead.
+	Also, added REQ_KICK case to handle new request; this just does
+	nothing.
+	* manager.c (pthread_exited): Do not terminate manager after
+	unblocking main thread.
+	* manager.c (__pthread_manager_sighandler): If the main thread
+	is waiting for all other threads to die, send a REQ_KICK into
+	the thread manager request pipe to get it to clean out the threads
+	and unblock the main thread as soon as possible. This fixes
+	the 2000 millisecond hang on shutdown bug.
+	* Examples/ex7.c: New file, tests shutdown behavior when all threads
+	including the main one call pthread_exit(), or implicitly do so.
+	* Makefile (tests): Add ex7.
+
 2000-05-05  Andreas Jaeger  <aj@suse.de>
 
 	* sysdeps/unix/sysv/linux/i386/getcpuclockid.c