Albert Chin
Fri, 28 Oct 2005 06:16:51 -0700
On Thu, Oct 27, 2005 at 09:00:50AM -0500, Albert Chin wrote: > On Thu, Oct 27, 2005 at 09:55:46AM -0400, Daniel Veillard wrote: > > On Thu, Oct 27, 2005 at 07:51:34AM -0500, Albert Chin wrote: > > > On Thu, Oct 27, 2005 at 06:07:33AM -0400, Daniel Veillard wrote: > > > > > Once I run the xmlIO test manually, the terminal window hangs after > > > > > the above command and the process exits. I don't see this behavior on > > > > > Solaris, Tru64 UNIX, IRIX, HP-UX, or Redhat Linux. > > > > > > > > > > Any ideas? > > > > > > > > What fd number was used to build the buffer ? > > > > > > n_fd: 0 > > > fd: 0 > > > > So apparently AIX dislikes when a child process might close its stdin > > descriptor ... maybe a #ifndef AIX is in order and pass -1 instead in that > > case... > > I changed the for loop so n_fd started with 1 and encountered the same > hang. I'll try to look into it some more.
The following sample problem, when run on AIX, duplicates the hang:
#include <stdio.h>
#include <unistd.h>
void
main (void) {
char *buffer;
write (0, buffer, 0);
}
The patch below to xmlIO.c works around this AIX oddity.
--
albert chin ([EMAIL PROTECTED])
-- snip snip
Index: xmlIO.c
===================================================================
--- xmlIO.c.orig 2005-08-05 08:53:39.000000000 -0500
+++ xmlIO.c 2005-10-28 00:45:10.779923000 -0500
@@ -610,10 +610,12 @@
*/
static int
xmlFdWrite (void * context, const char * buffer, int len) {
- int ret;
+ int ret = 0;
- ret = write((int) (long) context, &buffer[0], len);
- if (ret < 0) xmlIOErr(0, "write()");
+ if (len > 0) {
+ ret = write((int) (long) context, &buffer[0], len);
+ if (ret < 0) xmlIOErr(0, "write()");
+ }
return(ret);
}
#endif /* LIBXML_OUTPUT_ENABLED */
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
xml@gnome.org
http://mail.gnome.org/mailman/listinfo/xml