Tcl Source Code

Hex Artifact Content
Login

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                                            {.