Adrian Aichner <adrian(a)xemacs.org> wrote:
Since I reverted my own patch to close handles, and built with
Ben's
megapatch implementing a corrected version thereof, I have not seen
these uninterruptible hangs. I've been using XEmacs every day and
kept it running for many days so I should have ween them.
Thanks Ben!
[snip]
It probably was not your patch after all, as stated above.
Well ... great! Would you mind trying my patch again, then? For
convenience, here it is:
Index: lstream.c
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/src/lstream.c,v
retrieving revision 1.31
diff -d -u -r1.31 lstream.c
--- lstream.c 2004/11/12 17:16:30 1.31
+++ lstream.c 2004/11/29 04:42:28
@@ -778,8 +778,21 @@
static int
Lstream_pseudo_close (Lstream *lstr)
{
+ int flush_rc;
+
if (! (lstr->flags & LSTREAM_FL_IS_OPEN))
Lstream_internal_error ("lstream is not open", lstr);
+
+ /* Flush all the data in the buffer before closing.
+ May require multiple passes thru Lstream_flush_out().
+ This loop (instead of just calling Lstream_flush_out(),
+ fixes a problem where we sometimes lose data sent to
+ a process.
+ */
+
+ do {
+ flush_rc = Lstream_flush_out(lstr);
+ } while (lstr->out_buffer_ind > 0 && flush_rc >= 0);
/* don't check errors here -- best not to risk file descriptor loss */
return Lstream_flush (lstr);
If the hangs return, then we can try the approach of figuring out what
data is getting lost here and where it was supposed to go.
Thanks,
--
Jerry James
http://www.ittc.ku.edu/~james/