Artifact
3239db23aed56b87c25c436932f0d58b32f53d54:
Attachment "flush3.patch" to
ticket [525783ffff]
added by
dkf
2002-03-05 23:40:48.
0000: 2d 2d 2d 20 2f 68 6f 6d 65 2f 66 65 6c 6c 6f 77 --- /home/fellow
0010: 73 64 2f 6c 61 6e 67 2f 74 63 6c 2f 63 76 73 2f sd/lang/tcl/cvs/
0020: 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 55 6e 69 78 tcl/unix/tclUnix
0030: 43 68 61 6e 2e 63 09 54 68 75 20 46 65 62 20 32 Chan.c.Thu Feb 2
0040: 38 20 31 34 3a 32 36 3a 32 31 20 32 30 30 32 0a 8 14:26:21 2002.
0050: 2b 2b 2b 20 74 63 6c 55 6e 69 78 43 68 61 6e 2e +++ tclUnixChan.
0060: 63 09 54 75 65 20 4d 61 72 20 20 35 20 31 36 3a c.Tue Mar 5 16:
0070: 32 38 3a 33 38 20 32 30 30 32 0a 40 40 20 2d 36 28:38 2002.@@ -6
0080: 36 39 2c 31 31 20 2b 36 36 39 2c 31 37 20 40 40 69,11 +669,17 @@
0090: 0a 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 . ClientData
00a0: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 09 2f instanceData;./
00b0: 2a 20 54 74 79 20 73 74 61 74 65 2e 20 2a 2f 0a * Tty state. */.
00c0: 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 Tcl_Interp
00d0: 2a 69 6e 74 65 72 70 3b 09 09 2f 2a 20 46 6f 72 *interp;../* For
00e0: 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 error reporting
00f0: 20 2d 20 75 6e 75 73 65 64 2e 20 2a 2f 0a 20 7b - unused. */. {
0100: 0a 2d 20 20 20 20 54 74 79 53 74 61 74 65 20 2a .- TtyState *
0110: 74 74 79 50 74 72 3b 0a 2b 20 20 20 20 54 74 79 ttyPtr;.+ Tty
0120: 53 74 61 74 65 20 2a 74 74 79 50 74 72 20 3d 20 State *ttyPtr =
0130: 28 54 74 79 53 74 61 74 65 20 2a 29 20 69 6e 73 (TtyState *) ins
0140: 74 61 6e 63 65 44 61 74 61 3b 0a 20 0a 2d 20 20 tanceData;. .-
0150: 20 20 74 74 79 50 74 72 20 3d 20 28 54 74 79 53 ttyPtr = (TtyS
0160: 74 61 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 tate *) instance
0170: 44 61 74 61 3b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 Data;.+ /*.+
0180: 20 20 20 20 2a 20 4f 6e 6c 79 20 68 61 72 64 2d * Only hard-
0190: 66 6c 75 73 68 20 63 68 61 6e 6e 65 6c 73 20 74 flush channels t
01a0: 68 61 74 20 61 72 65 20 6e 6f 74 20 73 74 64 6f hat are not stdo
01b0: 75 74 20 61 6e 64 20 6e 6f 74 20 73 74 64 65 72 ut and not stder
01c0: 72 2c 0a 2b 20 20 20 20 20 2a 20 6f 74 68 65 72 r,.+ * other
01d0: 77 69 73 65 20 64 65 62 75 67 67 69 6e 67 20 6f wise debugging o
01e0: 75 74 70 75 74 20 73 65 6e 74 20 74 6f 20 74 65 utput sent to te
01f0: 72 6d 69 6e 61 6c 73 20 63 61 6e 20 67 65 74 20 rminals can get
0200: 6c 6f 73 74 21 0a 2b 20 20 20 20 20 2a 20 54 63 lost!.+ * Tc
0210: 6c 20 62 75 67 20 23 35 32 35 37 38 33 0a 2b 20 l bug #525783.+
0220: 20 20 20 20 2a 2f 0a 20 23 69 66 64 65 66 20 54 */. #ifdef T
0230: 54 59 46 4c 55 53 48 0a 2d 20 20 20 20 54 54 59 TYFLUSH.- TTY
0240: 46 4c 55 53 48 28 74 74 79 50 74 72 2d 3e 66 73 FLUSH(ttyPtr->fs
0250: 2e 66 64 29 3b 0a 2b 20 20 20 20 69 66 20 28 74 .fd);.+ if (t
0260: 74 79 50 74 72 2d 3e 66 73 2e 66 64 21 3d 30 20 tyPtr->fs.fd!=0
0270: 26 26 20 74 74 79 50 74 72 2d 3e 66 73 2e 66 64 && ttyPtr->fs.fd
0280: 21 3d 31 20 26 26 20 74 74 79 50 74 72 2d 3e 66 !=1 && ttyPtr->f
0290: 73 2e 66 64 21 3d 32 29 20 7b 0a 2b 09 54 54 59 s.fd!=2) {.+.TTY
02a0: 46 4c 55 53 48 28 74 74 79 50 74 72 2d 3e 66 73 FLUSH(ttyPtr->fs
02b0: 2e 66 64 29 3b 0a 2b 20 20 20 20 7d 0a 20 23 65 .fd);.+ }. #e
02c0: 6e 64 69 66 0a 20 23 69 66 20 30 0a 20 20 20 20 ndif. #if 0.
02d0: 20 2f 2a 0a 40 40 20 2d 37 32 30 2c 31 30 20 2b /*.@@ -720,10 +
02e0: 37 32 36 2c 31 34 20 40 40 0a 20 20 20 20 20 69 726,14 @@. i
02f0: 6e 74 20 74 6f 57 72 69 74 65 3b 09 09 09 2f 2a nt toWrite;.../*
0300: 20 48 6f 77 20 6d 61 6e 79 20 62 79 74 65 73 20 How many bytes
0310: 74 6f 20 77 72 69 74 65 3f 20 2a 2f 0a 20 20 20 to write? */.
0320: 20 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 int *errorCode
0330: 50 74 72 3b 09 09 09 2f 2a 20 57 68 65 72 65 20 Ptr;.../* Where
0340: 74 6f 20 73 74 6f 72 65 20 65 72 72 6f 72 20 63 to store error c
0350: 6f 64 65 2e 20 2a 2f 0a 20 7b 0a 2d 20 20 20 20 ode. */. {.-
0360: 69 66 20 28 20 54 63 6c 49 6e 45 78 69 74 28 29 if ( TclInExit()
0370: 20 29 20 7b 0a 2b 20 20 20 20 54 74 79 53 74 61 ) {.+ TtySta
0380: 74 65 20 2a 74 74 79 50 74 72 20 3d 20 28 54 74 te *ttyPtr = (Tt
0390: 79 53 74 61 74 65 20 2a 29 20 69 6e 73 74 61 6e yState *) instan
03a0: 63 65 44 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 69 ceData;.+.+ i
03b0: 66 20 28 74 74 79 50 74 72 2d 3e 66 73 2e 66 64 f (ttyPtr->fs.fd
03c0: 21 3d 31 20 26 26 20 74 74 79 50 74 72 2d 3e 66 !=1 && ttyPtr->f
03d0: 73 2e 66 64 21 3d 32 20 26 26 20 54 63 6c 49 6e s.fd!=2 && TclIn
03e0: 45 78 69 74 28 29 29 20 7b 0a 20 09 2f 2a 0a 2d Exit()) {. ./*.-
03f0: 09 20 2a 20 44 6f 20 6e 6f 74 20 77 72 69 74 65 . * Do not write
0400: 20 64 61 74 61 20 64 75 72 69 6e 67 20 54 63 6c data during Tcl
0410: 20 65 78 69 74 2e 0a 2d 09 20 2a 20 53 65 72 69 exit..-. * Seri
0420: 61 6c 20 70 6f 72 74 20 6d 61 79 20 62 6c 6f 63 al port may bloc
0430: 6b 20 70 72 65 76 65 6e 74 69 6e 67 20 54 63 6c k preventing Tcl
0440: 20 66 72 6f 6d 20 65 78 69 74 2e 0a 2b 09 20 2a from exit..+. *
0450: 20 44 6f 20 6e 6f 74 20 77 72 69 74 65 20 64 61 Do not write da
0460: 74 61 20 64 75 72 69 6e 67 20 54 63 6c 20 65 78 ta during Tcl ex
0470: 69 74 20 28 65 78 63 65 70 74 20 74 6f 20 73 74 it (except to st
0480: 64 6f 75 74 20 61 6e 64 0a 2b 09 20 2a 20 73 74 dout and.+. * st
0490: 64 65 72 72 2e 29 20 53 65 72 69 61 6c 20 70 6f derr.) Serial po
04a0: 72 74 20 6d 61 79 20 62 6c 6f 63 6b 20 70 72 65 rt may block pre
04b0: 76 65 6e 74 69 6e 67 20 54 63 6c 20 66 72 6f 6d venting Tcl from
04c0: 20 65 78 69 74 2e 0a 2b 09 20 2a 20 4e 6f 74 65 exit..+. * Note
04d0: 20 74 68 61 74 20 73 74 64 6f 75 74 20 61 6e 64 that stdout and
04e0: 20 73 74 64 65 72 72 20 61 72 65 20 65 78 63 65 stderr are exce
04f0: 70 74 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 pted because of
0500: 74 68 65 0a 2b 09 20 2a 20 69 6d 70 61 63 74 20 the.+. * impact
0510: 6f 6e 20 69 6e 74 65 72 61 63 74 69 76 65 20 64 on interactive d
0520: 65 62 75 67 67 69 6e 67 2e 2e 2e 0a 20 09 20 2a ebugging.... . *
0530: 2f 0a 20 09 72 65 74 75 72 6e 20 74 6f 57 72 69 /. .return toWri
0540: 74 65 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 te;. } else
0550: 7b 0a {.