Attachment "tcl8.4_all_002.diff" to
ticket [875701ffff]
added by
andreas_kupries
2005-01-28 05:51:23.
0000: 49 6e 64 65 78 3a 20 43 68 61 6e 67 65 4c 6f 67 Index: ChangeLog
0010: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .===============
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0050: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f ====.RCS file: /
0060: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f cvsroot/tcl/tcl/
0070: 43 68 61 6e 67 65 4c 6f 67 2c 76 0a 72 65 74 72 ChangeLog,v.retr
0080: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
0090: 31 2e 31 34 35 33 2e 32 2e 33 39 38 0a 64 69 66 1.1453.2.398.dif
00a0: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 31 34 35 33 f -w -u -r1.1453
00b0: 2e 32 2e 33 39 38 20 43 68 61 6e 67 65 4c 6f 67 .2.398 ChangeLog
00c0: 0a 2d 2d 2d 20 43 68 61 6e 67 65 4c 6f 67 09 32 .--- ChangeLog.2
00d0: 35 20 4a 61 6e 20 32 30 30 35 20 31 37 3a 35 38 5 Jan 2005 17:58
00e0: 3a 33 38 20 2d 30 30 30 30 09 31 2e 31 34 35 33 :38 -0000.1.1453
00f0: 2e 32 2e 33 39 38 0a 2b 2b 2b 20 43 68 61 6e 67 .2.398.+++ Chang
0100: 65 4c 6f 67 09 32 37 20 4a 61 6e 20 32 30 30 35 eLog.27 Jan 2005
0110: 20 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 22:49:18 -0000.
0120: 40 40 20 2d 31 2c 33 20 2b 31 2c 32 36 20 40 40 @@ -1,3 +1,26 @@
0130: 0a 2b 32 30 30 35 2d 30 31 2d 32 37 20 20 41 6e .+2005-01-27 An
0140: 64 72 65 61 73 20 4b 75 70 72 69 65 73 20 3c 61 dreas Kupries <a
0150: 6e 64 72 65 61 73 6b 40 61 63 74 69 76 65 73 74 ndreask@activest
0160: 61 74 65 2e 63 6f 6d 3e 0a 2b 0a 2b 09 54 49 50 ate.com>.+.+.TIP
0170: 23 32 31 38 20 49 4d 50 4c 45 4d 45 4e 54 41 54 #218 IMPLEMENTAT
0180: 49 4f 4e 0a 2b 0a 2b 09 2a 20 67 65 6e 65 72 69 ION.+.+.* generi
0190: 63 2f 74 63 6c 44 65 63 6c 73 2e 68 3a 09 52 65 c/tclDecls.h:.Re
01a0: 67 65 6e 65 72 61 74 65 64 20 66 72 6f 6d 20 74 generated from t
01b0: 63 6c 2e 64 65 63 6c 73 2e 0a 2b 09 2a 20 67 65 cl.decls..+.* ge
01c0: 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 neric/tclStubIni
01d0: 74 2e 63 3a 09 0a 2b 0a 2b 09 2a 20 64 6f 63 2f t.c:..+.+.* doc/
01e0: 43 72 74 43 68 61 6e 6e 65 6c 2e 33 3a 09 44 6f CrtChannel.3:.Do
01f0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 65 cumentation of e
0200: 78 74 65 6e 64 65 64 20 41 50 49 2c 0a 2b 09 2a xtended API,.+.*
0210: 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65 63 generic/tcl.dec
0220: 6c 73 3a 09 65 78 74 65 6e 64 65 64 20 74 65 73 ls:.extended tes
0230: 74 73 75 69 74 65 2c 20 61 6e 64 0a 2b 09 2a 20 tsuite, and.+.*
0240: 67 65 6e 65 72 69 63 2f 74 63 6c 2e 68 3a 09 69 generic/tcl.h:.i
0250: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 52 mplementation. R
0260: 65 6d 6f 76 61 6c 20 6f 66 20 6f 6c 64 0a 2b 09 emoval of old.+.
0270: 2a 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f 2e * generic/tclIO.
0280: 63 3a 09 64 72 69 76 65 72 2d 73 70 65 63 69 66 c:.driver-specif
0290: 69 63 20 54 63 6c 70 43 75 74 2f 53 70 6c 69 63 ic TclpCut/Splic
02a0: 65 0a 2b 09 2a 20 67 65 6e 65 72 69 63 2f 74 63 e.+.* generic/tc
02b0: 6c 49 6e 74 2e 68 3a 09 66 75 6e 63 74 69 6f 6e lInt.h:.function
02c0: 73 2e 20 52 65 70 6c 61 63 65 64 20 77 69 74 68 s. Replaced with
02d0: 20 67 65 6e 65 72 69 63 0a 2b 09 2a 20 74 65 73 generic.+.* tes
02e0: 74 73 2f 69 6f 2e 74 65 73 74 3a 09 74 68 72 65 ts/io.test:.thre
02f0: 61 64 2d 61 63 74 69 6f 6e 20 63 61 6c 6c 73 20 ad-action calls
0300: 74 68 72 6f 75 67 68 20 74 68 65 0a 2b 09 2a 20 through the.+.*
0310: 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 68 61 6e unix/tclUnixChan
0320: 2e 63 3a 09 6e 65 77 20 68 6f 6f 6b 73 2e 20 55 .c:.new hooks. U
0330: 70 64 61 74 65 20 6f 66 20 61 6c 6c 20 62 75 69 pdate of all bui
0340: 6c 74 69 6e 0a 2b 09 2a 20 75 6e 69 78 2f 74 63 ltin.+.* unix/tc
0350: 6c 55 6e 69 78 50 69 70 65 2e 63 3a 09 63 68 61 lUnixPipe.c:.cha
0360: 6e 6e 65 6c 20 64 72 69 76 65 72 73 20 74 6f 20 nnel drivers to
0370: 76 65 72 73 69 6f 6e 20 34 2e 0a 2b 09 2a 20 75 version 4..+.* u
0380: 6e 69 78 2f 74 63 6c 55 6e 69 78 53 6f 63 6b 2e nix/tclUnixSock.
0390: 63 3a 09 57 69 6e 64 6f 77 73 20 64 72 69 76 65 c:.Windows drive
03a0: 72 73 20 65 78 74 65 6e 64 65 64 20 74 6f 20 0a rs extended to .
03b0: 2b 09 2a 20 77 69 6e 2f 74 63 6c 57 69 6e 43 68 +.* win/tclWinCh
03c0: 61 6e 2e 63 3a 09 6d 61 6e 61 67 65 20 74 68 72 an.c:.manage thr
03d0: 65 61 64 20 73 74 61 74 65 20 69 6e 20 61 20 74 ead state in a t
03e0: 68 72 65 61 64 0a 2b 09 2a 20 77 69 6e 2f 74 63 hread.+.* win/tc
03f0: 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 3a 09 61 lWinConsole.c:.a
0400: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 72 2e 0a 2b ction handler..+
0410: 09 2a 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 .* win/tclWinPip
0420: 65 2e 63 3a 09 0a 2b 09 2a 20 77 69 6e 2f 74 63 e.c:..+.* win/tc
0430: 6c 57 69 6e 53 65 72 69 61 6c 2e 63 3a 09 0a 2b lWinSerial.c:..+
0440: 09 2a 20 77 69 6e 2f 74 63 6c 57 69 6e 53 6f 63 .* win/tclWinSoc
0450: 6b 2e 63 3a 09 0a 2b 09 2a 20 6d 61 63 2f 74 63 k.c:..+.* mac/tc
0460: 6c 4d 61 63 43 68 61 6e 2e 63 3a 0a 2b 0a 20 32 lMacChan.c:.+. 2
0470: 30 30 35 2d 30 31 2d 32 35 20 20 44 6f 6e 20 50 005-01-25 Don P
0480: 6f 72 74 65 72 20 20 3c 64 67 70 40 75 73 65 72 orter <dgp@user
0490: 73 2e 73 6f 75 72 63 65 66 6f 72 67 65 2e 6e 65 s.sourceforge.ne
04a0: 74 3e 0a 20 0a 20 20 20 20 20 20 20 20 20 2a 20 t>. . *
04b0: 6c 69 62 72 61 72 79 2f 61 75 74 6f 2e 74 63 6c library/auto.tcl
04c0: 3a 20 20 20 20 20 55 70 64 61 74 65 64 20 5b 61 : Updated [a
04d0: 75 74 6f 5f 72 65 73 65 74 5d 20 74 6f 20 63 6c uto_reset] to cl
04e0: 65 61 72 20 61 75 74 6f 2d 6c 6f 61 64 65 64 0a ear auto-loaded.
04f0: 49 6e 64 65 78 3a 20 64 6f 63 2f 43 72 74 43 68 Index: doc/CrtCh
0500: 61 6e 6e 65 6c 2e 33 0a 3d 3d 3d 3d 3d 3d 3d 3d annel.3.========
0510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
0540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
0550: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
0560: 63 6c 2f 74 63 6c 2f 64 6f 63 2f 43 72 74 43 68 cl/tcl/doc/CrtCh
0570: 61 6e 6e 65 6c 2e 33 2c 76 0a 72 65 74 72 69 65 annel.3,v.retrie
0580: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
0590: 31 36 2e 32 2e 32 0a 64 69 66 66 20 2d 77 20 2d 16.2.2.diff -w -
05a0: 75 20 2d 72 31 2e 31 36 2e 32 2e 32 20 43 72 74 u -r1.16.2.2 Crt
05b0: 43 68 61 6e 6e 65 6c 2e 33 0a 2d 2d 2d 20 64 6f Channel.3.--- do
05c0: 63 2f 43 72 74 43 68 61 6e 6e 65 6c 2e 33 09 32 c/CrtChannel.3.2
05d0: 20 4e 6f 76 20 32 30 30 34 20 30 39 3a 32 31 3a Nov 2004 09:21:
05e0: 32 35 20 2d 30 30 30 30 09 31 2e 31 36 2e 32 2e 25 -0000.1.16.2.
05f0: 32 0a 2b 2b 2b 20 64 6f 63 2f 43 72 74 43 68 61 2.+++ doc/CrtCha
0600: 6e 6e 65 6c 2e 33 09 32 37 20 4a 61 6e 20 32 30 nnel.3.27 Jan 20
0610: 30 35 20 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 05 22:49:18 -000
0620: 30 0a 40 40 20 2d 37 2c 31 31 20 2b 37 2c 31 31 0.@@ -7,11 +7,11
0630: 20 40 40 0a 20 27 5c 22 0a 20 27 5c 22 20 52 43 @@. '\". '\" RC
0640: 53 3a 20 40 28 23 29 20 24 49 64 3a 20 43 72 74 S: @(#) $Id: Crt
0650: 43 68 61 6e 6e 65 6c 2e 33 2c 76 20 31 2e 31 36 Channel.3,v 1.16
0660: 2e 32 2e 32 20 32 30 30 34 2f 31 31 2f 30 32 20 .2.2 2004/11/02
0670: 30 39 3a 32 31 3a 32 35 20 64 6b 66 20 45 78 70 09:21:25 dkf Exp
0680: 20 24 0a 20 2e 73 6f 20 6d 61 6e 2e 6d 61 63 72 $. .so man.macr
0690: 6f 73 0a 2d 2e 54 48 20 54 63 6c 5f 43 72 65 61 os.-.TH Tcl_Crea
06a0: 74 65 43 68 61 6e 6e 65 6c 20 33 20 38 2e 33 20 teChannel 3 8.3
06b0: 54 63 6c 20 22 54 63 6c 20 4c 69 62 72 61 72 79 Tcl "Tcl Library
06c0: 20 50 72 6f 63 65 64 75 72 65 73 22 0a 2b 2e 54 Procedures".+.T
06d0: 48 20 54 63 6c 5f 43 72 65 61 74 65 43 68 61 6e H Tcl_CreateChan
06e0: 6e 65 6c 20 33 20 38 2e 34 20 54 63 6c 20 22 54 nel 3 8.4 Tcl "T
06f0: 63 6c 20 4c 69 62 72 61 72 79 20 50 72 6f 63 65 cl Library Proce
0700: 64 75 72 65 73 22 0a 20 2e 42 53 0a 20 27 5c 22 dures". .BS. '\"
0710: 20 4e 6f 74 65 3a 20 20 64 6f 20 6e 6f 74 20 6d Note: do not m
0720: 6f 64 69 66 79 20 74 68 65 20 2e 53 48 20 4e 41 odify the .SH NA
0730: 4d 45 20 6c 69 6e 65 20 69 6d 6d 65 64 69 61 74 ME line immediat
0740: 65 6c 79 20 62 65 6c 6f 77 21 0a 20 2e 53 48 20 ely below!. .SH
0750: 4e 41 4d 45 0a 2d 54 63 6c 5f 43 72 65 61 74 65 NAME.-Tcl_Create
0760: 43 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f 47 65 74 Channel, Tcl_Get
0770: 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65 44 ChannelInstanceD
0780: 61 74 61 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e ata, Tcl_GetChan
0790: 6e 65 6c 54 79 70 65 2c 20 54 63 6c 5f 47 65 74 nelType, Tcl_Get
07a0: 43 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 54 63 6c ChannelName, Tcl
07b0: 5f 47 65 74 43 68 61 6e 6e 65 6c 48 61 6e 64 6c _GetChannelHandl
07c0: 65 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 e, Tcl_GetChanne
07d0: 6c 4d 6f 64 65 2c 20 54 63 6c 5f 47 65 74 43 68 lMode, Tcl_GetCh
07e0: 61 6e 6e 65 6c 42 75 66 66 65 72 53 69 7a 65 2c annelBufferSize,
07f0: 20 54 63 6c 5f 53 65 74 43 68 61 6e 6e 65 6c 42 Tcl_SetChannelB
0800: 75 66 66 65 72 53 69 7a 65 2c 20 54 63 6c 5f 4e ufferSize, Tcl_N
0810: 6f 74 69 66 79 43 68 61 6e 6e 65 6c 2c 20 54 63 otifyChannel, Tc
0820: 6c 5f 42 61 64 43 68 61 6e 6e 65 6c 4f 70 74 69 l_BadChannelOpti
0830: 6f 6e 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 4e on, Tcl_ChannelN
0840: 61 6d 65 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c ame, Tcl_Channel
0850: 56 65 72 73 69 6f 6e 2c 20 54 63 6c 5f 43 68 61 Version, Tcl_Cha
0860: 6e 6e 65 6c 42 6c 6f 63 6b 4d 6f 64 65 50 72 6f nnelBlockModePro
0870: 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 43 6c c, Tcl_ChannelCl
0880: 6f 73 65 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 oseProc, Tcl_Cha
0890: 6e 6e 65 6c 43 6c 6f 73 65 32 50 72 6f 63 2c 20 nnelClose2Proc,
08a0: 54 63 6c 5f 43 68 61 6e 6e 65 6c 49 6e 70 75 74 Tcl_ChannelInput
08b0: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Proc, Tcl_Channe
08c0: 6c 4f 75 74 70 75 74 50 72 6f 63 2c 20 54 63 6c lOutputProc, Tcl
08d0: 5f 43 68 61 6e 6e 65 6c 53 65 65 6b 50 72 6f 63 _ChannelSeekProc
08e0: 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 69 64 , Tcl_ChannelWid
08f0: 65 53 65 65 6b 50 72 6f 63 2c 20 54 63 6c 5f 43 eSeekProc, Tcl_C
0900: 68 61 6e 6e 65 6c 53 65 74 4f 70 74 69 6f 6e 50 hannelSetOptionP
0910: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c roc, Tcl_Channel
0920: 47 65 74 4f 70 74 69 6f 6e 50 72 6f 63 2c 20 54 GetOptionProc, T
0930: 63 6c 5f 43 68 61 6e 6e 65 6c 57 61 74 63 68 50 cl_ChannelWatchP
0940: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c roc, Tcl_Channel
0950: 47 65 74 48 61 6e 64 6c 65 50 72 6f 63 2c 20 54 GetHandleProc, T
0960: 63 6c 5f 43 68 61 6e 6e 65 6c 46 6c 75 73 68 50 cl_ChannelFlushP
0970: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c roc, Tcl_Channel
0980: 48 61 6e 64 6c 65 72 50 72 6f 63 2c 20 54 63 6c HandlerProc, Tcl
0990: 5f 49 73 43 68 61 6e 6e 65 6c 53 68 61 72 65 64 _IsChannelShared
09a0: 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 6c 52 , Tcl_IsChannelR
09b0: 65 67 69 73 74 65 72 65 64 2c 20 54 63 6c 5f 43 egistered, Tcl_C
09c0: 75 74 43 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f 53 utChannel, Tcl_S
09d0: 70 6c 69 63 65 43 68 61 6e 6e 65 6c 2c 20 54 63 pliceChannel, Tc
09e0: 6c 5f 49 73 43 68 61 6e 6e 65 6c 45 78 69 73 74 l_IsChannelExist
09f0: 69 6e 67 2c 20 54 63 6c 5f 43 6c 65 61 72 43 68 ing, Tcl_ClearCh
0a00: 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 73 2c 20 54 annelHandlers, T
0a10: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 68 72 cl_GetChannelThr
0a20: 65 61 64 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c ead, Tcl_Channel
0a30: 42 75 66 66 65 72 65 64 20 5c 2d 20 70 72 6f 63 Buffered \- proc
0a40: 65 64 75 72 65 73 20 66 6f 72 20 63 72 65 61 74 edures for creat
0a50: 69 6e 67 20 61 6e 64 20 6d 61 6e 69 70 75 6c 61 ing and manipula
0a60: 74 69 6e 67 20 63 68 61 6e 6e 65 6c 73 0a 2b 54 ting channels.+T
0a70: 63 6c 5f 43 72 65 61 74 65 43 68 61 6e 6e 65 6c cl_CreateChannel
0a80: 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c , Tcl_GetChannel
0a90: 49 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 54 63 InstanceData, Tc
0aa0: 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70 65 l_GetChannelType
0ab0: 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c , Tcl_GetChannel
0ac0: 4e 61 6d 65 2c 20 54 63 6c 5f 47 65 74 43 68 61 Name, Tcl_GetCha
0ad0: 6e 6e 65 6c 48 61 6e 64 6c 65 2c 20 54 63 6c 5f nnelHandle, Tcl_
0ae0: 47 65 74 43 68 61 6e 6e 65 6c 4d 6f 64 65 2c 20 GetChannelMode,
0af0: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 42 75 Tcl_GetChannelBu
0b00: 66 66 65 72 53 69 7a 65 2c 20 54 63 6c 5f 53 65 fferSize, Tcl_Se
0b10: 74 43 68 61 6e 6e 65 6c 42 75 66 66 65 72 53 69 tChannelBufferSi
0b20: 7a 65 2c 20 54 63 6c 5f 4e 6f 74 69 66 79 43 68 ze, Tcl_NotifyCh
0b30: 61 6e 6e 65 6c 2c 20 54 63 6c 5f 42 61 64 43 68 annel, Tcl_BadCh
0b40: 61 6e 6e 65 6c 4f 70 74 69 6f 6e 2c 20 54 63 6c annelOption, Tcl
0b50: 5f 43 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 54 63 _ChannelName, Tc
0b60: 6c 5f 43 68 61 6e 6e 65 6c 56 65 72 73 69 6f 6e l_ChannelVersion
0b70: 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 42 6c 6f , Tcl_ChannelBlo
0b80: 63 6b 4d 6f 64 65 50 72 6f 63 2c 20 54 63 6c 5f ckModeProc, Tcl_
0b90: 43 68 61 6e 6e 65 6c 43 6c 6f 73 65 50 72 6f 63 ChannelCloseProc
0ba0: 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 43 6c 6f , Tcl_ChannelClo
0bb0: 73 65 32 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 se2Proc, Tcl_Cha
0bc0: 6e 6e 65 6c 49 6e 70 75 74 50 72 6f 63 2c 20 54 nnelInputProc, T
0bd0: 63 6c 5f 43 68 61 6e 6e 65 6c 4f 75 74 70 75 74 cl_ChannelOutput
0be0: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Proc, Tcl_Channe
0bf0: 6c 53 65 65 6b 50 72 6f 63 2c 20 54 63 6c 5f 43 lSeekProc, Tcl_C
0c00: 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 hannelWideSeekPr
0c10: 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 53 oc, Tcl_ChannelS
0c20: 65 74 4f 70 74 69 6f 6e 50 72 6f 63 2c 20 54 63 etOptionProc, Tc
0c30: 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 4f 70 74 69 l_ChannelGetOpti
0c40: 6f 6e 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e onProc, Tcl_Chan
0c50: 6e 65 6c 57 61 74 63 68 50 72 6f 63 2c 20 54 63 nelWatchProc, Tc
0c60: 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 48 61 6e 64 l_ChannelGetHand
0c70: 6c 65 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e leProc, Tcl_Chan
0c80: 6e 65 6c 46 6c 75 73 68 50 72 6f 63 2c 20 54 63 nelFlushProc, Tc
0c90: 6c 5f 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 l_ChannelHandler
0ca0: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Proc, Tcl_Channe
0cb0: 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f lThreadActionPro
0cc0: 63 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 6c c, Tcl_IsChannel
0cd0: 53 68 61 72 65 64 2c 20 54 63 6c 5f 49 73 43 68 Shared, Tcl_IsCh
0ce0: 61 6e 6e 65 6c 52 65 67 69 73 74 65 72 65 64 2c annelRegistered,
0cf0: 20 54 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c 2c Tcl_CutChannel,
0d00: 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e 6e Tcl_SpliceChann
0d10: 65 6c 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 el, Tcl_IsChanne
0d20: 6c 45 78 69 73 74 69 6e 67 2c 20 54 63 6c 5f 43 lExisting, Tcl_C
0d30: 6c 65 61 72 43 68 61 6e 6e 65 6c 48 61 6e 64 6c learChannelHandl
0d40: 65 72 73 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e ers, Tcl_GetChan
0d50: 6e 65 6c 54 68 72 65 61 64 2c 20 54 63 6c 5f 43 nelThread, Tcl_C
0d60: 68 61 6e 6e 65 6c 42 75 66 66 65 72 65 64 20 5c hannelBuffered \
0d70: 2d 20 70 72 6f 63 65 64 75 72 65 73 20 66 6f 72 - procedures for
0d80: 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 6d 61 creating and ma
0d90: 6e 69 70 75 6c 61 74 69 6e 67 20 63 68 61 6e 6e nipulating chann
0da0: 65 6c 73 0a 20 2e 53 48 20 53 59 4e 4f 50 53 49 els. .SH SYNOPSI
0db0: 53 0a 20 2e 6e 66 0a 20 5c 66 42 23 69 6e 63 6c S. .nf. \fB#incl
0dc0: 75 64 65 20 3c 74 63 6c 2e 68 3e 5c 66 52 0a 40 ude <tcl.h>\fR.@
0dd0: 40 20 2d 39 39 2c 36 20 2b 39 39 2c 39 20 40 40 @ -99,6 +99,9 @@
0de0: 0a 20 2e 56 53 20 38 2e 34 0a 20 54 63 6c 5f 44 . .VS 8.4. Tcl_D
0df0: 72 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 6f riverWideSeekPro
0e00: 63 20 2a 0a 20 5c 66 42 54 63 6c 5f 43 68 61 6e c *. \fBTcl_Chan
0e10: 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 5c nelWideSeekProc\
0e20: 66 52 28 5c 66 49 74 79 70 65 50 74 72 5c 66 52 fR(\fItypePtr\fR
0e30: 29 0a 2b 2e 73 70 0a 2b 54 63 6c 5f 44 72 69 76 ).+.sp.+Tcl_Driv
0e40: 65 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 erThreadActionPr
0e50: 6f 63 20 2a 0a 2b 5c 66 42 54 63 6c 5f 43 68 61 oc *.+\fBTcl_Cha
0e60: 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e nnelThreadAction
0e70: 50 72 6f 63 5c 66 52 28 5c 66 49 74 79 70 65 50 Proc\fR(\fItypeP
0e80: 74 72 5c 66 52 29 0a 20 2e 56 45 20 38 2e 34 0a tr\fR). .VE 8.4.
0e90: 20 2e 73 70 0a 20 54 63 6c 5f 44 72 69 76 65 72 .sp. Tcl_Driver
0ea0: 53 65 74 4f 70 74 69 6f 6e 50 72 6f 63 20 2a 0a SetOptionProc *.
0eb0: 40 40 20 2d 32 38 39 2c 31 30 20 2b 32 39 32 2c @@ -289,10 +292,
0ec0: 32 30 20 40 40 0a 20 28 74 68 72 65 61 64 29 67 20 @@. (thread)g
0ed0: 6c 6f 62 61 6c 20 6c 69 73 74 20 6f 66 20 61 6c lobal list of al
0ee0: 6c 20 63 68 61 6e 6e 65 6c 73 20 28 6f 66 20 74 l channels (of t
0ef0: 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 he current threa
0f00: 64 29 2e 0a 20 41 70 70 6c 69 63 61 74 69 6f 6e d).. Application
0f10: 20 74 6f 20 61 20 63 68 61 6e 6e 65 6c 20 73 74 to a channel st
0f20: 69 6c 6c 20 72 65 67 69 73 74 65 72 65 64 20 69 ill registered i
0f30: 6e 20 73 6f 6d 65 20 69 6e 74 65 72 70 72 65 74 n some interpret
0f40: 65 72 0a 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 er. is not allow
0f50: 65 64 2e 0a 2b 2e 56 53 20 38 2e 34 0a 2b 41 6c ed..+.VS 8.4.+Al
0f60: 73 6f 20 6e 6f 74 69 66 69 65 73 20 74 68 65 20 so notifies the
0f70: 64 72 69 76 65 72 20 69 66 20 74 68 65 20 5c 66 driver if the \f
0f80: 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 BTcl_ChannelType
0f90: 5c 66 52 20 76 65 72 73 69 6f 6e 20 69 73 0a 2b \fR version is.+
0fa0: 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 \fBTCL_CHANNEL_V
0fb0: 45 52 53 49 4f 4e 5f 34 5c 66 52 20 28 6f 72 20 ERSION_4\fR (or
0fc0: 68 69 67 68 65 72 29 2c 20 61 6e 64 0a 2b 5c 66 higher), and.+\f
0fd0: 42 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61 BTcl_DriverThrea
0fe0: 64 41 63 74 69 6f 6e 50 72 6f 63 5c 66 52 20 69 dActionProc\fR i
0ff0: 73 20 64 65 66 69 6e 65 64 20 66 6f 72 20 69 74 s defined for it
1000: 2e 0a 2b 2e 56 45 20 38 2e 34 0a 20 2e 50 50 0a ..+.VE 8.4. .PP.
1010: 20 5c 66 42 54 63 6c 5f 53 70 6c 69 63 65 43 68 \fBTcl_SpliceCh
1020: 61 6e 6e 65 6c 5c 66 52 20 61 64 64 73 20 74 68 annel\fR adds th
1030: 65 20 73 70 65 63 69 66 69 65 64 20 5c 66 49 63 e specified \fIc
1040: 68 61 6e 6e 65 6c 5c 66 52 20 74 6f 20 74 68 65 hannel\fR to the
1050: 0a 20 28 74 68 72 65 61 64 29 67 6c 6f 62 61 6c . (thread)global
1060: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 61 list of all cha
1070: 6e 6e 65 6c 73 20 28 6f 66 20 74 68 65 20 63 75 nnels (of the cu
1080: 72 72 65 6e 74 20 74 68 72 65 61 64 29 2e 0a 20 rrent thread)..
1090: 41 70 70 6c 69 63 61 74 69 6f 6e 20 74 6f 20 61 Application to a
10a0: 20 63 68 61 6e 6e 65 6c 20 72 65 67 69 73 74 65 channel registe
10b0: 72 65 64 20 69 6e 20 73 6f 6d 65 20 69 6e 74 65 red in some inte
10c0: 72 70 72 65 74 65 72 20 69 73 20 6e 6f 74 20 61 rpreter is not a
10d0: 6c 6c 6f 77 65 64 2e 0a 2b 2e 56 53 20 38 2e 34 llowed..+.VS 8.4
10e0: 0a 2b 41 6c 73 6f 20 6e 6f 74 69 66 69 65 73 20 .+Also notifies
10f0: 74 68 65 20 64 72 69 76 65 72 20 69 66 20 74 68 the driver if th
1100: 65 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c e \fBTcl_Channel
1110: 54 79 70 65 5c 66 52 20 76 65 72 73 69 6f 6e 20 Type\fR version
1120: 69 73 0a 2b 5c 66 42 54 43 4c 5f 43 48 41 4e 4e is.+\fBTCL_CHANN
1130: 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 5c 66 52 20 EL_VERSION_4\fR
1140: 28 6f 72 20 68 69 67 68 65 72 29 2c 20 61 6e 64 (or higher), and
1150: 0a 2b 5c 66 42 54 63 6c 5f 44 72 69 76 65 72 54 .+\fBTcl_DriverT
1160: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 5c hreadActionProc\
1170: 66 52 20 69 73 20 64 65 66 69 6e 65 64 20 66 6f fR is defined fo
1180: 72 20 69 74 2e 0a 2b 2e 56 45 20 38 2e 34 0a 20 r it..+.VE 8.4.
1190: 2e 50 50 0a 20 5c 66 42 54 63 6c 5f 43 6c 65 61 .PP. \fBTcl_Clea
11a0: 72 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 73 rChannelHandlers
11b0: 5c 66 52 20 72 65 6d 6f 76 65 73 20 61 6c 6c 20 \fR removes all
11c0: 63 68 61 6e 6e 65 6c 68 61 6e 64 6c 65 72 73 20 channelhandlers
11d0: 61 6e 64 20 65 76 65 6e 74 0a 20 73 63 72 69 70 and event. scrip
11e0: 74 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 ts associated wi
11f0: 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 64 th the specified
1200: 20 5c 66 49 63 68 61 6e 6e 65 6c 5c 66 52 2c 20 \fIchannel\fR,
1210: 74 68 75 73 20 73 68 75 74 74 69 6e 67 0a 40 40 thus shutting.@@
1220: 20 2d 33 32 36 2c 36 20 2b 33 33 39 2c 37 20 40 -326,6 +339,7 @
1230: 40 0a 20 09 54 63 6c 5f 44 72 69 76 65 72 46 6c @. .Tcl_DriverFl
1240: 75 73 68 50 72 6f 63 20 2a 5c 66 49 66 6c 75 73 ushProc *\fIflus
1250: 68 50 72 6f 63 5c 66 52 3b 09 0a 20 09 54 63 6c hProc\fR;.. .Tcl
1260: 5f 44 72 69 76 65 72 48 61 6e 64 6c 65 72 50 72 _DriverHandlerPr
1270: 6f 63 20 2a 5c 66 49 68 61 6e 64 6c 65 72 50 72 oc *\fIhandlerPr
1280: 6f 63 5c 66 52 3b 09 0a 20 09 54 63 6c 5f 44 72 oc\fR;.. .Tcl_Dr
1290: 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 6f 63 iverWideSeekProc
12a0: 20 2a 5c 66 49 77 69 64 65 53 65 65 6b 50 72 6f *\fIwideSeekPro
12b0: 63 5c 66 52 3b 0a 2b 09 54 63 6c 5f 44 72 69 76 c\fR;.+.Tcl_Driv
12c0: 65 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 erThreadActionPr
12d0: 6f 63 20 2a 5c 66 49 74 68 72 65 61 64 41 63 74 oc *\fIthreadAct
12e0: 69 6f 6e 50 72 6f 63 5c 66 52 3b 0a 20 7d 20 54 ionProc\fR;. } T
12f0: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 3b 0a cl_ChannelType;.
1300: 20 2e 43 45 0a 20 2e 50 50 0a 40 40 20 2d 33 34 .CE. .PP.@@ -34
1310: 36 2c 36 20 2b 33 36 30 2c 37 20 40 40 0a 20 5c 6,6 +360,7 @@. \
1320: 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 4f 75 74 fBTcl_ChannelOut
1330: 70 75 74 50 72 6f 63 5c 66 52 2c 20 5c 66 42 54 putProc\fR, \fBT
1340: 63 6c 5f 43 68 61 6e 6e 65 6c 53 65 65 6b 50 72 cl_ChannelSeekPr
1350: 6f 63 5c 66 52 2c 0a 20 2e 56 53 20 38 2e 34 0a oc\fR,. .VS 8.4.
1360: 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 \fBTcl_ChannelW
1370: 69 64 65 53 65 65 6b 50 72 6f 63 5c 66 52 2c 0a ideSeekProc\fR,.
1380: 2b 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 +\fBTcl_ChannelT
1390: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 5c hreadActionProc\
13a0: 66 52 2c 0a 20 2e 56 45 20 38 2e 34 0a 20 5c 66 fR,. .VE 8.4. \f
13b0: 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 53 65 74 4f BTcl_ChannelSetO
13c0: 70 74 69 6f 6e 50 72 6f 63 5c 66 52 2c 20 5c 66 ptionProc\fR, \f
13d0: 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 4f BTcl_ChannelGetO
13e0: 70 74 69 6f 6e 50 72 6f 63 5c 66 52 2c 0a 20 5c ptionProc\fR,. \
13f0: 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 61 74 fBTcl_ChannelWat
1400: 63 68 50 72 6f 63 5c 66 52 2c 20 5c 66 42 54 63 chProc\fR, \fBTc
1410: 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 48 61 6e 64 l_ChannelGetHand
1420: 6c 65 50 72 6f 63 5c 66 52 2c 0a 40 40 20 2d 33 leProc\fR,.@@ -3
1430: 36 37 2c 31 38 20 2b 33 38 32 2c 32 37 20 40 40 67,18 +382,27 @@
1440: 0a 20 0a 20 2e 53 48 20 56 45 52 53 49 4f 4e 0a . . .SH VERSION.
1450: 20 2e 50 50 0a 2d 54 68 65 20 5c 66 49 76 65 72 .PP.-The \fIver
1460: 73 69 6f 6e 5c 66 52 20 66 69 65 6c 64 20 73 68 sion\fR field sh
1470: 6f 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 5c ould be set to \
1480: 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 fBTCL_CHANNEL_VE
1490: 52 53 49 4f 4e 5f 32 5c 66 52 2e 0a 2d 49 66 20 RSION_2\fR..-If
14a0: 69 74 20 69 73 20 6e 6f 74 20 73 65 74 20 74 6f it is not set to
14b0: 20 74 68 69 73 20 76 61 6c 75 65 20 5c 66 42 54 this value \fBT
14c0: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 CL_CHANNEL_VERSI
14d0: 4f 4e 5f 33 5c 66 52 2c 20 74 68 65 6e 20 74 68 ON_3\fR, then th
14e0: 69 73 0a 2d 5c 66 42 54 63 6c 5f 43 68 61 6e 6e is.-\fBTcl_Chann
14f0: 65 6c 54 79 70 65 5c 66 52 20 69 73 20 61 73 73 elType\fR is ass
1500: 75 6d 65 64 20 74 6f 20 68 61 76 65 20 74 68 65 umed to have the
1510: 20 6f 6c 64 65 72 20 73 74 72 75 63 74 75 72 65 older structure
1520: 2e 20 20 53 65 65 0a 2b 0a 2b 54 68 65 20 5c 66 . See.+.+The \f
1530: 49 76 65 72 73 69 6f 6e 5c 66 52 20 66 69 65 6c Iversion\fR fiel
1540: 64 20 73 68 6f 75 6c 64 20 62 65 20 73 65 74 20 d should be set
1550: 74 6f 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6f to the version o
1560: 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a f the structure.
1570: 2b 74 68 61 74 20 79 6f 75 20 72 65 71 75 69 72 +that you requir
1580: 65 2e 20 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 e. \fBTCL_CHANNE
1590: 4c 5f 56 45 52 53 49 4f 4e 5f 32 5c 66 52 20 69 L_VERSION_2\fR i
15a0: 73 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 72 65 s the minimum re
15b0: 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2b 2e 56 53 20 commended..+.VS
15c0: 38 2e 34 0a 2b 5c 66 42 54 43 4c 5f 43 48 41 4e 8.4.+\fBTCL_CHAN
15d0: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 5c 66 52 NEL_VERSION_3\fR
15e0: 20 6d 75 73 74 20 62 65 20 73 65 74 20 74 6f 20 must be set to
15f0: 73 70 65 63 69 66 69 79 20 74 68 65 20 5c 66 49 specifiy the \fI
1600: 77 69 64 65 53 65 65 6b 50 72 6f 63 5c 66 52 20 wideSeekProc\fR
1610: 6d 65 6d 62 65 72 2e 0a 2b 2e 56 45 20 38 2e 34 member..+.VE 8.4
1620: 0a 2b 2e 56 53 20 38 2e 34 0a 2b 5c 66 42 54 43 .+.VS 8.4.+\fBTC
1630: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
1640: 4e 5f 34 5c 66 52 20 6d 75 73 74 20 62 65 20 73 N_4\fR must be s
1650: 65 74 20 74 6f 20 73 70 65 63 69 66 69 79 20 74 et to specifiy t
1660: 68 65 0a 2b 5c 66 49 74 68 72 65 61 64 41 63 74 he.+\fIthreadAct
1670: 69 6f 6e 50 72 6f 63 5c 66 52 20 6d 65 6d 62 65 ionProc\fR membe
1680: 72 20 28 69 6e 63 6c 75 64 65 73 20 5c 66 49 77 r (includes \fIw
1690: 69 64 65 53 65 65 6b 50 72 6f 63 5c 66 52 29 2e ideSeekProc\fR).
16a0: 0a 2b 2e 56 45 20 38 2e 34 0a 2b 49 66 20 69 74 .+.VE 8.4.+If it
16b0: 20 69 73 20 6e 6f 74 20 73 65 74 20 74 6f 20 61 is not set to a
16c0: 6e 79 20 6f 66 20 74 68 65 73 65 2c 20 74 68 65 ny of these, the
16d0: 6e 20 74 68 69 73 0a 2b 5c 66 42 54 63 6c 5f 43 n this.+\fBTcl_C
16e0: 68 61 6e 6e 65 6c 54 79 70 65 5c 66 52 20 69 73 hannelType\fR is
16f0: 20 61 73 73 75 6d 65 64 20 74 6f 20 68 61 76 65 assumed to have
1700: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 73 74 the original st
1710: 72 75 63 74 75 72 65 2e 20 20 53 65 65 0a 20 5c ructure. See. \
1720: 66 42 4f 4c 44 20 43 48 41 4e 4e 45 4c 20 54 59 fBOLD CHANNEL TY
1730: 50 45 53 5c 66 52 20 66 6f 72 20 6d 6f 72 65 20 PES\fR for more
1740: 64 65 74 61 69 6c 73 2e 20 20 57 68 69 6c 65 20 details. While
1750: 54 63 6c 20 77 69 6c 6c 20 72 65 63 6f 67 6e 69 Tcl will recogni
1760: 7a 65 0a 2d 61 6e 64 20 66 75 6e 63 74 69 6f 6e ze.-and function
1770: 20 77 69 74 68 20 65 69 74 68 65 72 20 73 74 72 with either str
1780: 75 63 74 75 72 65 2c 20 73 74 61 63 6b 65 64 20 ucture, stacked
1790: 63 68 61 6e 6e 65 6c 73 20 6d 75 73 74 20 62 65 channels must be
17a0: 20 6f 66 20 61 74 0a 2b 61 6e 64 20 66 75 6e 63 of at.+and func
17b0: 74 69 6f 6e 20 77 69 74 68 20 65 69 74 68 65 72 tion with either
17c0: 20 73 74 72 75 63 74 75 72 65 73 2c 20 73 74 61 structures, sta
17d0: 63 6b 65 64 20 63 68 61 6e 6e 65 6c 73 20 6d 75 cked channels mu
17e0: 73 74 20 62 65 20 6f 66 20 61 74 0a 20 6c 65 61 st be of at. lea
17f0: 73 74 20 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 st \fBTCL_CHANNE
1800: 4c 5f 56 45 52 53 49 4f 4e 5f 32 5c 66 52 20 74 L_VERSION_2\fR t
1810: 6f 20 66 75 6e 63 74 69 6f 6e 20 63 6f 72 72 65 o function corre
1820: 63 74 6c 79 2e 0a 20 2e 50 50 0a 20 54 68 69 73 ctly.. .PP. This
1830: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 72 65 value can be re
1840: 74 72 69 65 76 65 64 20 77 69 74 68 20 5c 66 42 trieved with \fB
1850: 54 63 6c 5f 43 68 61 6e 6e 65 6c 56 65 72 73 69 Tcl_ChannelVersi
1860: 6f 6e 5c 66 52 2c 20 77 68 69 63 68 20 72 65 74 on\fR, which ret
1870: 75 72 6e 73 0a 20 2e 56 53 20 38 2e 34 0a 2d 6f urns. .VS 8.4.-o
1880: 6e 65 20 6f 66 20 5c 66 42 54 43 4c 5f 43 48 41 ne of \fBTCL_CHA
1890: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 5c 66 NNEL_VERSION_3\f
18a0: 52 2c 0a 2b 6f 6e 65 20 6f 66 20 5c 66 42 54 43 R,.+one of \fBTC
18b0: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
18c0: 4e 5f 34 5c 66 52 2c 20 5c 66 42 54 43 4c 5f 43 N_4\fR, \fBTCL_C
18d0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 HANNEL_VERSION_3
18e0: 5c 66 52 2c 0a 20 2e 56 45 20 38 2e 34 0a 2d 5c \fR,. .VE 8.4.-\
18f0: 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 fBTCL_CHANNEL_VE
1900: 52 53 49 4f 4e 5f 32 5c 66 52 20 6f 72 20 5c 66 RSION_2\fR or \f
1910: 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 BTCL_CHANNEL_VER
1920: 53 49 4f 4e 5f 31 5c 66 52 2e 0a 2b 5c 66 42 54 SION_1\fR..+\fBT
1930: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 CL_CHANNEL_VERSI
1940: 4f 4e 5f 32 5c 66 52 2c 20 6f 72 20 5c 66 42 54 ON_2\fR, or \fBT
1950: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 CL_CHANNEL_VERSI
1960: 4f 4e 5f 31 5c 66 52 2e 0a 20 0a 20 2e 53 48 20 ON_1\fR.. . .SH
1970: 42 4c 4f 43 4b 4d 4f 44 45 50 52 4f 43 0a 20 2e BLOCKMODEPROC. .
1980: 50 50 0a 40 40 20 2d 37 39 30 2c 36 20 2b 38 31 PP.@@ -790,6 +81
1990: 34 2c 33 35 20 40 40 0a 20 54 68 69 73 20 76 61 4,35 @@. This va
19a0: 6c 75 65 20 63 61 6e 20 62 65 20 72 65 74 72 69 lue can be retri
19b0: 65 76 65 64 20 77 69 74 68 20 5c 66 42 54 63 6c eved with \fBTcl
19c0: 5f 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 50 _ChannelHandlerP
19d0: 72 6f 63 5c 66 52 2c 20 77 68 69 63 68 20 72 65 roc\fR, which re
19e0: 74 75 72 6e 73 0a 20 61 20 70 6f 69 6e 74 65 72 turns. a pointer
19f0: 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e to the function
1a00: 2e 0a 20 0a 2b 2e 56 53 20 38 2e 34 0a 2b 2e 53 .. .+.VS 8.4.+.S
1a10: 48 20 22 54 48 52 45 41 44 41 43 54 49 4f 4e 50 H "THREADACTIONP
1a20: 52 4f 43 22 0a 2b 2e 50 50 0a 2b 54 68 65 20 5c ROC".+.PP.+The \
1a30: 66 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f fthreadActionPro
1a40: 63 5c 66 52 20 66 69 65 6c 64 20 63 6f 6e 74 61 c\fR field conta
1a50: 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 ins the address
1a60: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a of the function.
1a70: 2b 63 61 6c 6c 65 64 20 62 79 20 74 68 65 20 67 +called by the g
1a80: 65 6e 65 72 69 63 20 6c 61 79 65 72 20 77 68 65 eneric layer whe
1a90: 6e 20 61 20 63 68 61 6e 6e 65 6c 20 69 73 20 63 n a channel is c
1aa0: 72 65 61 74 65 64 2c 20 63 6c 6f 73 65 64 2c 20 reated, closed,
1ab0: 6f 72 0a 2b 67 6f 69 6e 67 20 74 6f 20 6d 6f 76 or.+going to mov
1ac0: 65 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 e to a different
1ad0: 20 74 68 72 65 61 64 2c 20 69 2e 65 2e 20 77 68 thread, i.e. wh
1ae0: 65 6e 65 76 65 72 20 74 68 72 65 61 64 2d 73 70 enever thread-sp
1af0: 65 63 69 66 69 63 0a 2b 64 72 69 76 65 72 20 73 ecific.+driver s
1b00: 74 61 74 65 20 6d 69 67 68 74 20 68 61 76 65 20 tate might have
1b10: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6f to initialized o
1b20: 72 20 75 70 64 61 74 65 64 2e 20 49 74 20 63 61 r updated. It ca
1b30: 6e 20 62 65 20 4e 55 4c 4c 2e 0a 2b 54 68 65 20 n be NULL..+The
1b40: 61 63 74 69 6f 6e 20 5c 66 49 54 43 4c 5f 43 48 action \fITCL_CH
1b50: 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d ANNEL_THREAD_REM
1b60: 4f 56 45 5c 66 52 20 69 73 20 75 73 65 64 20 74 OVE\fR is used t
1b70: 6f 20 6e 6f 74 69 66 79 20 74 68 65 0a 2b 64 72 o notify the.+dr
1b80: 69 76 65 72 20 74 68 61 74 20 69 74 20 73 68 6f iver that it sho
1b90: 75 6c 64 20 75 70 64 61 74 65 20 6f 72 20 72 65 uld update or re
1ba0: 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 64 2d move any thread-
1bb0: 73 70 65 63 69 66 69 63 20 64 61 74 61 20 69 74 specific data it
1bc0: 0a 2b 6d 69 67 68 74 20 62 65 20 6d 61 69 6e 74 .+might be maint
1bd0: 61 69 6e 69 6e 67 20 66 6f 72 20 74 68 65 20 63 aining for the c
1be0: 68 61 6e 6e 65 6c 2e 0a 2b 2e 50 50 0a 2b 54 68 hannel..+.PP.+Th
1bf0: 65 20 61 63 74 69 6f 6e 20 5c 66 49 54 43 4c 5f e action \fITCL_
1c00: 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 CHANNEL_THREAD_I
1c10: 4e 53 45 52 54 5c 66 52 20 69 73 20 75 73 65 64 NSERT\fR is used
1c20: 20 74 6f 20 6e 6f 74 69 66 79 20 74 68 65 0a 2b to notify the.+
1c30: 64 72 69 76 65 72 20 74 68 61 74 20 69 74 20 73 driver that it s
1c40: 68 6f 75 6c 64 20 75 70 64 61 74 65 20 6f 72 20 hould update or
1c50: 69 6e 69 74 69 61 6c 69 7a 65 20 61 6e 79 20 74 initialize any t
1c60: 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 20 64 hread-specific d
1c70: 61 74 61 20 69 74 0a 2b 6d 69 67 68 74 20 62 65 ata it.+might be
1c80: 20 6d 61 69 6e 74 61 69 6e 69 6e 67 20 75 73 69 maintaining usi
1c90: 6e 67 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 74 ng the calling t
1ca0: 68 72 65 61 64 20 61 73 20 74 68 65 20 61 73 73 hread as the ass
1cb0: 6f 63 69 61 74 65 2e 20 53 65 65 0a 2b 5c 66 42 ociate. See.+\fB
1cc0: 54 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c 5c 66 Tcl_CutChannel\f
1cd0: 52 20 61 6e 64 20 5c 66 42 54 63 6c 5f 53 70 6c R and \fBTcl_Spl
1ce0: 69 63 65 43 68 61 6e 6e 65 6c 5c 66 52 20 66 6f iceChannel\fR fo
1cf0: 72 20 6d 6f 72 65 20 64 65 74 61 69 6c 2e 0a 2b r more detail..+
1d00: 2e 50 50 0a 2b 2e 43 53 0a 2b 74 79 70 65 64 65 .PP.+.CS.+typede
1d10: 66 20 76 6f 69 64 20 54 63 6c 5f 44 72 69 76 65 f void Tcl_Drive
1d20: 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f rThreadActionPro
1d30: 63 28 0a 2b 09 43 6c 69 65 6e 74 44 61 74 61 20 c(.+.ClientData
1d40: 5c 66 49 69 6e 73 74 61 6e 63 65 44 61 74 61 5c \fIinstanceData\
1d50: 66 52 2c 0a 2b 20 20 20 20 20 20 69 6e 74 20 20 fR,.+ int
1d60: 20 20 20 20 20 20 5c 66 49 61 63 74 69 6f 6e 5c \fIaction\
1d70: 66 52 29 3b 0a 2b 2e 43 45 0a 2b 2e 50 50 0a 2b fR);.+.CE.+.PP.+
1d80: 5c 66 49 49 6e 73 74 61 6e 63 65 44 61 74 61 5c \fIInstanceData\
1d90: 66 52 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 fR is the same a
1da0: 73 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 s the value pass
1db0: 65 64 20 74 6f 0a 2b 5c 66 42 54 63 6c 5f 43 72 ed to.+\fBTcl_Cr
1dc0: 65 61 74 65 43 68 61 6e 6e 65 6c 5c 66 52 20 77 eateChannel\fR w
1dd0: 68 65 6e 20 74 68 69 73 20 63 68 61 6e 6e 65 6c hen this channel
1de0: 20 77 61 73 20 63 72 65 61 74 65 64 2e 0a 2b 2e was created..+.
1df0: 50 50 0a 2b 54 68 65 73 65 20 76 61 6c 75 65 73 PP.+These values
1e00: 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 76 65 can be retrieve
1e10: 64 20 77 69 74 68 20 5c 66 42 54 63 6c 5f 43 68 d with \fBTcl_Ch
1e20: 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f annelThreadActio
1e30: 6e 50 72 6f 63 5c 66 52 2c 0a 2b 77 68 69 63 68 nProc\fR,.+which
1e40: 20 72 65 74 75 72 6e 73 20 61 20 70 6f 69 6e 74 returns a point
1e50: 65 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 er to the functi
1e60: 6f 6e 2e 0a 2b 2e 56 45 20 38 2e 34 0a 2b 0a 20 on..+.VE 8.4.+.
1e70: 2e 53 48 20 54 43 4c 5f 42 41 44 43 48 41 4e 4e .SH TCL_BADCHANN
1e80: 45 4c 4f 50 54 49 4f 4e 0a 20 2e 50 50 0a 20 54 ELOPTION. .PP. T
1e90: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 67 65 his procedure ge
1ea0: 6e 65 72 61 74 65 73 20 61 20 22 62 61 64 20 6f nerates a "bad o
1eb0: 70 74 69 6f 6e 22 20 65 72 72 6f 72 20 6d 65 73 ption" error mes
1ec0: 73 61 67 65 20 69 6e 20 61 6e 0a 49 6e 64 65 78 sage in an.Index
1ed0: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65 : generic/tcl.de
1ee0: 63 6c 73 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d cls.============
1ef0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1f00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1f20: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 =======.RCS file
1f30: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 : /cvsroot/tcl/t
1f40: 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 cl/generic/tcl.d
1f50: 65 63 6c 73 2c 76 0a 72 65 74 72 69 65 76 69 6e ecls,v.retrievin
1f60: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 39 34 2e g revision 1.94.
1f70: 32 2e 32 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 2.2.diff -w -u -
1f80: 72 31 2e 39 34 2e 32 2e 32 20 74 63 6c 2e 64 65 r1.94.2.2 tcl.de
1f90: 63 6c 73 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f cls.--- generic/
1fa0: 74 63 6c 2e 64 65 63 6c 73 09 31 33 20 4d 61 79 tcl.decls.13 May
1fb0: 20 32 30 30 33 20 30 39 3a 35 37 3a 34 30 20 2d 2003 09:57:40 -
1fc0: 30 30 30 30 09 31 2e 39 34 2e 32 2e 32 0a 2b 2b 0000.1.94.2.2.++
1fd0: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65 + generic/tcl.de
1fe0: 63 6c 73 09 32 37 20 4a 61 6e 20 32 30 30 35 20 cls.27 Jan 2005
1ff0: 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 40 22:49:18 -0000.@
2000: 40 20 2d 31 37 35 34 2c 36 20 2b 31 37 35 34 2c @ -1754,6 +1754,
2010: 32 34 20 40 40 0a 20 09 20 20 20 20 54 63 6c 5f 24 @@. . Tcl_
2020: 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 63 68 61 ChannelType *cha
2030: 6e 54 79 70 65 50 74 72 29 0a 20 7d 0a 20 0a 2b nTypePtr). }. .+
2040: 23 20 53 6c 6f 74 73 20 34 39 34 20 74 6f 20 35 # Slots 494 to 5
2050: 35 33 20 61 72 65 20 74 61 6b 65 6e 20 61 6c 72 53 are taken alr
2060: 65 61 64 79 20 62 79 20 38 2e 35 0a 2b 23 20 23 eady by 8.5.+# #
2070: 31 31 31 20 2d 20 44 69 63 74 73 20 20 20 20 20 111 - Dicts
2080: 20 20 20 20 20 20 20 28 34 39 34 20 2e 2e 2e 20 (494 ...
2090: 35 30 34 29 0a 2b 23 20 20 23 35 39 20 2d 20 43 504).+# #59 - C
20a0: 6f 6e 66 69 67 20 20 20 20 20 20 20 20 20 20 20 onfig
20b0: 28 35 30 35 29 0a 2b 23 20 23 31 33 39 20 2d 20 (505).+# #139 -
20c0: 4e 61 6d 65 73 70 61 63 65 20 41 50 49 20 20 20 Namespace API
20d0: 20 28 35 30 36 20 2e 2e 2e 20 35 31 37 29 0a 2b (506 ... 517).+
20e0: 23 20 23 31 33 37 20 2d 20 73 6f 75 72 63 65 20 # #137 - source
20f0: 2d 65 6e 63 6f 64 69 6e 67 20 28 35 31 38 29 0a -encoding (518).
2100: 2b 23 20 23 31 32 31 20 2d 20 45 78 69 74 50 72 +# #121 - ExitPr
2110: 6f 63 20 20 20 20 20 20 20 20 20 28 35 31 39 29 oc (519)
2120: 0a 2b 23 20 23 31 32 31 20 2d 20 52 65 73 6f 75 .+# #121 - Resou
2130: 72 63 65 20 4c 69 6d 69 74 73 20 20 28 35 32 30 rce Limits (520
2140: 20 2e 2e 2e 20 35 33 34 29 0a 2b 23 20 23 32 32 ... 534).+# #22
2150: 36 20 2d 20 53 2f 52 20 49 6e 74 65 72 70 20 53 6 - S/R Interp S
2160: 74 61 74 65 20 28 35 33 35 20 2e 2e 2e 20 35 33 tate (535 ... 53
2170: 37 29 0a 2b 23 20 23 32 32 37 20 2d 20 53 2f 47 7).+# #227 - S/G
2180: 20 52 65 74 75 72 6e 20 4f 70 74 73 20 20 28 35 Return Opts (5
2190: 33 38 20 2e 2e 2e 20 35 33 39 29 0a 2b 23 20 23 38 ... 539).+# #
21a0: 32 33 35 20 2d 20 45 6e 73 65 6d 62 6c 65 20 43 235 - Ensemble C
21b0: 20 41 50 49 20 20 20 28 35 34 30 20 2e 2e 2e 20 API (540 ...
21c0: 35 35 31 29 0a 2b 23 20 23 32 33 33 20 2d 20 56 551).+# #233 - V
21d0: 69 72 74 75 61 6c 69 7a 65 64 20 54 69 6d 65 20 irtualized Time
21e0: 28 35 35 32 20 2e 2e 2e 20 35 35 33 29 0a 2b 0a (552 ... 553).+.
21f0: 2b 23 20 54 49 50 23 32 31 38 20 28 44 72 69 76 +# TIP#218 (Driv
2200: 65 72 20 54 68 72 65 61 64 20 41 63 74 69 6f 6e er Thread Action
2210: 73 29 20 64 61 76 79 67 72 76 79 2f 61 6b 75 70 s) davygrvy/akup
2220: 72 69 65 73 20 43 68 61 6e 6e 65 6c 54 79 70 65 ries ChannelType
2230: 20 76 65 72 20 34 0a 2b 23 20 54 68 65 73 65 20 ver 4.+# These
2240: 73 6c 6f 74 73 20 61 72 65 20 75 73 65 64 20 62 slots are used b
2250: 79 20 38 2e 35 20 61 73 20 77 65 6c 6c 2e 0a 2b y 8.5 as well..+
2260: 64 65 63 6c 61 72 65 20 35 35 34 20 67 65 6e 65 declare 554 gene
2270: 72 69 63 20 7b 0a 2b 20 20 20 20 54 63 6c 5f 44 ric {.+ Tcl_D
2280: 72 69 76 65 72 54 68 72 65 61 64 41 63 74 69 6f riverThreadActio
2290: 6e 50 72 6f 63 20 2a 54 63 6c 5f 43 68 61 6e 6e nProc *Tcl_Chann
22a0: 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 elThreadActionPr
22b0: 6f 63 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 oc(Tcl_ChannelTy
22c0: 70 65 20 2a 63 68 61 6e 54 79 70 65 50 74 72 29 pe *chanTypePtr)
22d0: 0a 2b 7d 0a 2b 0a 20 23 23 23 23 23 23 23 23 23 .+}.+. #########
22e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
22f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
2300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
2310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
2320: 23 23 23 23 23 0a 20 0a 20 23 20 44 65 66 69 6e #####. . # Defin
2330: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 73 e the platform s
2340: 70 65 63 69 66 69 63 20 70 75 62 6c 69 63 20 54 pecific public T
2350: 63 6c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 cl interface. T
2360: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 hese functions a
2370: 72 65 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 re.Index: generi
2380: 63 2f 74 63 6c 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d c/tcl.h.========
2390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
23c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
23d0: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
23e0: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 cl/tcl/generic/t
23f0: 63 6c 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e cl.h,v.retrievin
2400: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 35 33 g revision 1.153
2410: 2e 32 2e 31 36 0a 64 69 66 66 20 2d 77 20 2d 75 .2.16.diff -w -u
2420: 20 2d 72 31 2e 31 35 33 2e 32 2e 31 36 20 74 63 -r1.153.2.16 tc
2430: 6c 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f l.h.--- generic/
2440: 74 63 6c 2e 68 09 32 35 20 4e 6f 76 20 32 30 30 tcl.h.25 Nov 200
2450: 34 20 30 30 3a 31 39 3a 32 37 20 2d 30 30 30 30 4 00:19:27 -0000
2460: 09 31 2e 31 35 33 2e 32 2e 31 36 0a 2b 2b 2b 20 .1.153.2.16.+++
2470: 67 65 6e 65 72 69 63 2f 74 63 6c 2e 68 09 32 37 generic/tcl.h.27
2480: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a Jan 2005 22:49:
2490: 31 38 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 32 18 -0000.@@ -142
24a0: 35 2c 36 20 2b 31 34 32 35 2c 31 34 20 40 40 0a 5,6 +1425,14 @@.
24b0: 20 23 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 #define TCL_CHA
24c0: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 31 09 28 NNEL_VERSION_1.(
24d0: 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 (Tcl_ChannelType
24e0: 56 65 72 73 69 6f 6e 29 20 30 78 31 29 0a 20 23 Version) 0x1). #
24f0: 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e define TCL_CHANN
2500: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 09 28 28 54 EL_VERSION_2.((T
2510: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 56 65 cl_ChannelTypeVe
2520: 72 73 69 6f 6e 29 20 30 78 32 29 0a 20 23 64 65 rsion) 0x2). #de
2530: 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 4c fine TCL_CHANNEL
2540: 5f 56 45 52 53 49 4f 4e 5f 33 09 28 28 54 63 6c _VERSION_3.((Tcl
2550: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 56 65 72 73 _ChannelTypeVers
2560: 69 6f 6e 29 20 30 78 33 29 0a 2b 23 64 65 66 69 ion) 0x3).+#defi
2570: 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 ne TCL_CHANNEL_V
2580: 45 52 53 49 4f 4e 5f 34 09 28 28 54 63 6c 5f 43 ERSION_4.((Tcl_C
2590: 68 61 6e 6e 65 6c 54 79 70 65 56 65 72 73 69 6f hannelTypeVersio
25a0: 6e 29 20 30 78 34 29 0a 2b 0a 2b 2f 2a 0a 2b 20 n) 0x4).+.+/*.+
25b0: 2a 20 54 49 50 20 23 32 31 38 3a 20 43 68 61 6e * TIP #218: Chan
25c0: 6e 65 6c 20 41 63 74 69 6f 6e 73 2c 20 49 64 73 nel Actions, Ids
25d0: 20 66 6f 72 20 54 63 6c 5f 44 72 69 76 65 72 54 for Tcl_DriverT
25e0: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 0a hreadActionProc.
25f0: 2b 20 2a 2f 0a 2b 0a 2b 23 64 65 66 69 6e 65 20 + */.+.+#define
2600: 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 52 45 TCL_CHANNEL_THRE
2610: 41 44 5f 49 4e 53 45 52 54 20 28 30 29 0a 2b 23 AD_INSERT (0).+#
2620: 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e define TCL_CHANN
2630: 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f 56 45 EL_THREAD_REMOVE
2640: 20 28 31 29 0a 20 0a 20 2f 2a 0a 20 20 2a 20 54 (1). . /*. * T
2650: 79 70 65 64 65 66 73 20 66 6f 72 20 74 68 65 20 ypedefs for the
2660: 76 61 72 69 6f 75 73 20 6f 70 65 72 61 74 69 6f various operatio
2670: 6e 73 20 69 6e 20 61 20 63 68 61 6e 6e 65 6c 20 ns in a channel
2680: 74 79 70 65 3a 0a 40 40 20 2d 31 34 36 30 2c 36 type:.@@ -1460,6
2690: 20 2b 31 34 36 38 2c 39 20 40 40 0a 20 09 09 20 +1468,9 @@. ..
26a0: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e ClientData in
26b0: 73 74 61 6e 63 65 44 61 74 61 2c 20 54 63 6c 5f stanceData, Tcl_
26c0: 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 0a WideInt offset,.
26d0: 20 09 09 20 20 20 20 69 6e 74 20 6d 6f 64 65 2c .. int mode,
26e0: 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50 int *errorCodeP
26f0: 74 72 29 29 3b 0a 20 0a 2b 20 20 2f 2a 20 54 49 tr));. .+ /* TI
2700: 50 20 23 32 31 38 2c 20 43 68 61 6e 6e 65 6c 20 P #218, Channel
2710: 54 68 72 65 61 64 20 41 63 74 69 6f 6e 73 20 2a Thread Actions *
2720: 2f 0a 2b 74 79 70 65 64 65 66 20 76 6f 69 64 20 /.+typedef void
2730: 20 20 20 20 28 54 63 6c 5f 44 72 69 76 65 72 54 (Tcl_DriverT
2740: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 29 hreadActionProc)
2750: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20 28 28 0a _ANSI_ARGS_ ((.
2760: 2b 09 09 20 20 20 20 43 6c 69 65 6e 74 44 61 74 +.. ClientDat
2770: 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 a instanceData,
2780: 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b 0a 20 0a int action));. .
2790: 20 2f 2a 0a 20 20 2a 20 54 68 65 20 66 6f 6c 6c /*. * The foll
27a0: 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74 69 6f owing declaratio
27b0: 6e 73 20 65 69 74 68 65 72 20 6d 61 70 20 63 6b ns either map ck
27c0: 61 6c 6c 6f 63 20 61 6e 64 20 63 6b 66 72 65 65 alloc and ckfree
27d0: 20 74 6f 0a 40 40 20 2d 31 35 35 30 2c 36 20 2b to.@@ -1550,6 +
27e0: 31 35 36 31 2c 31 36 20 40 40 0a 20 09 09 09 09 1561,16 @@. ....
27f0: 09 20 2a 20 68 61 6e 64 6c 65 20 36 34 2d 62 69 . * handle 64-bi
2800: 74 20 6f 66 66 73 65 74 73 2e 20 4d 61 79 20 62 t offsets. May b
2810: 65 0a 20 09 09 09 09 09 20 2a 20 4e 55 4c 4c 2c e. ..... * NULL,
2820: 20 61 6e 64 20 6d 75 73 74 20 62 65 20 4e 55 4c and must be NUL
2830: 4c 20 69 66 0a 20 09 09 09 09 09 20 2a 20 73 65 L if. ..... * se
2840: 65 6b 50 72 6f 63 20 69 73 20 4e 55 4c 4c 2e 20 ekProc is NULL.
2850: 2a 2f 0a 2b 0a 2b 20 20 20 20 20 2f 2a 0a 2b 20 */.+.+ /*.+
2860: 20 20 20 20 20 2a 20 4f 6e 6c 79 20 76 61 6c 69 * Only vali
2870: 64 20 69 6e 20 54 43 4c 5f 43 48 41 4e 4e 45 4c d in TCL_CHANNEL
2880: 5f 56 45 52 53 49 4f 4e 5f 34 20 63 68 61 6e 6e _VERSION_4 chann
2890: 65 6c 73 20 6f 72 20 6c 61 74 65 72 0a 2b 20 20 els or later.+
28a0: 20 20 20 20 2a 20 54 49 50 20 23 32 31 38 2c 20 * TIP #218,
28b0: 43 68 61 6e 6e 65 6c 20 54 68 72 65 61 64 20 41 Channel Thread A
28c0: 63 74 69 6f 6e 73 0a 2b 20 20 20 20 20 20 2a 2f ctions.+ */
28d0: 0a 2b 20 20 20 20 20 54 63 6c 5f 44 72 69 76 65 .+ Tcl_Drive
28e0: 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f rThreadActionPro
28f0: 63 20 2a 74 68 72 65 61 64 41 63 74 69 6f 6e 50 c *threadActionP
2900: 72 6f 63 3b 0a 2b 20 09 09 09 09 09 2f 2a 20 50 roc;.+ ...../* P
2910: 72 6f 63 65 64 75 72 65 20 74 6f 20 63 61 6c 6c rocedure to call
2920: 20 74 6f 20 6e 6f 74 69 66 79 0a 2b 20 09 09 09 to notify.+ ...
2930: 09 09 20 2a 20 74 68 65 20 64 72 69 76 65 72 20 .. * the driver
2940: 6f 66 20 74 68 72 65 61 64 20 73 70 65 63 69 66 of thread specif
2950: 69 63 0a 2b 20 09 09 09 09 09 20 2a 20 61 63 74 ic.+ ..... * act
2960: 69 76 69 74 79 20 66 6f 72 20 61 20 63 68 61 6e ivity for a chan
2970: 6e 65 6c 2e 0a 2b 09 09 09 09 09 20 2a 20 4d 61 nel..+..... * Ma
2980: 79 20 62 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 7d y be NULL. */. }
2990: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 Tcl_ChannelType
29a0: 3b 0a 20 0a 20 2f 2a 0a 49 6e 64 65 78 3a 20 67 ;. . /*.Index: g
29b0: 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e eneric/tclDecls.
29c0: 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d h.==============
29d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
29f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2a00: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 =====.RCS file:
2a10: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c /cvsroot/tcl/tcl
2a20: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c /generic/tclDecl
2a30: 73 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 s.h,v.retrieving
2a40: 20 72 65 76 69 73 69 6f 6e 20 31 2e 39 33 2e 32 revision 1.93.2
2a50: 2e 35 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 .5.diff -w -u -r
2a60: 31 2e 39 33 2e 32 2e 35 20 74 63 6c 44 65 63 6c 1.93.2.5 tclDecl
2a70: 73 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f s.h.--- generic/
2a80: 74 63 6c 44 65 63 6c 73 2e 68 09 31 30 20 4a 75 tclDecls.h.10 Ju
2a90: 6e 20 32 30 30 34 20 31 37 3a 31 37 3a 34 32 20 n 2004 17:17:42
2aa0: 2d 30 30 30 30 09 31 2e 39 33 2e 32 2e 35 0a 2b -0000.1.93.2.5.+
2ab0: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 44 65 ++ generic/tclDe
2ac0: 63 6c 73 2e 68 09 32 37 20 4a 61 6e 20 32 30 30 cls.h.27 Jan 200
2ad0: 35 20 32 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 5 22:49:18 -0000
2ae0: 0a 40 40 20 2d 31 35 36 34 2c 36 20 2b 31 35 36 .@@ -1564,6 +156
2af0: 34 2c 36 39 20 40 40 0a 20 2f 2a 20 34 39 33 20 4,69 @@. /* 493
2b00: 2a 2f 0a 20 45 58 54 45 52 4e 20 54 63 6c 5f 44 */. EXTERN Tcl_D
2b10: 72 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 6f riverWideSeekPro
2b20: 63 20 2a 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 c * Tcl_ChannelW
2b30: 69 64 65 53 65 65 6b 50 72 6f 63 20 5f 41 4e 53 ideSeekProc _ANS
2b40: 49 5f 41 52 47 53 5f 28 28 0a 20 09 09 09 09 54 I_ARGS_((. ....T
2b50: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a cl_ChannelType *
2b60: 20 63 68 61 6e 54 79 70 65 50 74 72 29 29 3b 0a chanTypePtr));.
2b70: 2b 2f 2a 20 53 6c 6f 74 20 34 39 34 20 69 73 20 +/* Slot 494 is
2b80: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2b90: 53 6c 6f 74 20 34 39 35 20 69 73 20 72 65 73 65 Slot 495 is rese
2ba0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2bb0: 20 34 39 36 20 69 73 20 72 65 73 65 72 76 65 64 496 is reserved
2bc0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 34 39 37 */.+/* Slot 497
2bd0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2be0: 2b 2f 2a 20 53 6c 6f 74 20 34 39 38 20 69 73 20 +/* Slot 498 is
2bf0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2c00: 53 6c 6f 74 20 34 39 39 20 69 73 20 72 65 73 65 Slot 499 is rese
2c10: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2c20: 20 35 30 30 20 69 73 20 72 65 73 65 72 76 65 64 500 is reserved
2c30: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 31 */.+/* Slot 501
2c40: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2c50: 2b 2f 2a 20 53 6c 6f 74 20 35 30 32 20 69 73 20 +/* Slot 502 is
2c60: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2c70: 53 6c 6f 74 20 35 30 33 20 69 73 20 72 65 73 65 Slot 503 is rese
2c80: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2c90: 20 35 30 34 20 69 73 20 72 65 73 65 72 76 65 64 504 is reserved
2ca0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 35 */.+/* Slot 505
2cb0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2cc0: 2b 2f 2a 20 53 6c 6f 74 20 35 30 36 20 69 73 20 +/* Slot 506 is
2cd0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2ce0: 53 6c 6f 74 20 35 30 37 20 69 73 20 72 65 73 65 Slot 507 is rese
2cf0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2d00: 20 35 30 38 20 69 73 20 72 65 73 65 72 76 65 64 508 is reserved
2d10: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 39 */.+/* Slot 509
2d20: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2d30: 2b 2f 2a 20 53 6c 6f 74 20 35 31 30 20 69 73 20 +/* Slot 510 is
2d40: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2d50: 53 6c 6f 74 20 35 31 31 20 69 73 20 72 65 73 65 Slot 511 is rese
2d60: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2d70: 20 35 31 32 20 69 73 20 72 65 73 65 72 76 65 64 512 is reserved
2d80: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 33 */.+/* Slot 513
2d90: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2da0: 2b 2f 2a 20 53 6c 6f 74 20 35 31 34 20 69 73 20 +/* Slot 514 is
2db0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2dc0: 53 6c 6f 74 20 35 31 35 20 69 73 20 72 65 73 65 Slot 515 is rese
2dd0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2de0: 20 35 31 36 20 69 73 20 72 65 73 65 72 76 65 64 516 is reserved
2df0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 37 */.+/* Slot 517
2e00: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2e10: 2b 2f 2a 20 53 6c 6f 74 20 35 31 38 20 69 73 20 +/* Slot 518 is
2e20: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2e30: 53 6c 6f 74 20 35 31 39 20 69 73 20 72 65 73 65 Slot 519 is rese
2e40: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2e50: 20 35 32 30 20 69 73 20 72 65 73 65 72 76 65 64 520 is reserved
2e60: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 31 */.+/* Slot 521
2e70: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2e80: 2b 2f 2a 20 53 6c 6f 74 20 35 32 32 20 69 73 20 +/* Slot 522 is
2e90: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2ea0: 53 6c 6f 74 20 35 32 33 20 69 73 20 72 65 73 65 Slot 523 is rese
2eb0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2ec0: 20 35 32 34 20 69 73 20 72 65 73 65 72 76 65 64 524 is reserved
2ed0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 35 */.+/* Slot 525
2ee0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2ef0: 2b 2f 2a 20 53 6c 6f 74 20 35 32 36 20 69 73 20 +/* Slot 526 is
2f00: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2f10: 53 6c 6f 74 20 35 32 37 20 69 73 20 72 65 73 65 Slot 527 is rese
2f20: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2f30: 20 35 32 38 20 69 73 20 72 65 73 65 72 76 65 64 528 is reserved
2f40: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 39 */.+/* Slot 529
2f50: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2f60: 2b 2f 2a 20 53 6c 6f 74 20 35 33 30 20 69 73 20 +/* Slot 530 is
2f70: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2f80: 53 6c 6f 74 20 35 33 31 20 69 73 20 72 65 73 65 Slot 531 is rese
2f90: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
2fa0: 20 35 33 32 20 69 73 20 72 65 73 65 72 76 65 64 532 is reserved
2fb0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 33 */.+/* Slot 533
2fc0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
2fd0: 2b 2f 2a 20 53 6c 6f 74 20 35 33 34 20 69 73 20 +/* Slot 534 is
2fe0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
2ff0: 53 6c 6f 74 20 35 33 35 20 69 73 20 72 65 73 65 Slot 535 is rese
3000: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3010: 20 35 33 36 20 69 73 20 72 65 73 65 72 76 65 64 536 is reserved
3020: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 37 */.+/* Slot 537
3030: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3040: 2b 2f 2a 20 53 6c 6f 74 20 35 33 38 20 69 73 20 +/* Slot 538 is
3050: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3060: 53 6c 6f 74 20 35 33 39 20 69 73 20 72 65 73 65 Slot 539 is rese
3070: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3080: 20 35 34 30 20 69 73 20 72 65 73 65 72 76 65 64 540 is reserved
3090: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 31 */.+/* Slot 541
30a0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
30b0: 2b 2f 2a 20 53 6c 6f 74 20 35 34 32 20 69 73 20 +/* Slot 542 is
30c0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
30d0: 53 6c 6f 74 20 35 34 33 20 69 73 20 72 65 73 65 Slot 543 is rese
30e0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
30f0: 20 35 34 34 20 69 73 20 72 65 73 65 72 76 65 64 544 is reserved
3100: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 35 */.+/* Slot 545
3110: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3120: 2b 2f 2a 20 53 6c 6f 74 20 35 34 36 20 69 73 20 +/* Slot 546 is
3130: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3140: 53 6c 6f 74 20 35 34 37 20 69 73 20 72 65 73 65 Slot 547 is rese
3150: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3160: 20 35 34 38 20 69 73 20 72 65 73 65 72 76 65 64 548 is reserved
3170: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 39 */.+/* Slot 549
3180: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3190: 2b 2f 2a 20 53 6c 6f 74 20 35 35 30 20 69 73 20 +/* Slot 550 is
31a0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
31b0: 53 6c 6f 74 20 35 35 31 20 69 73 20 72 65 73 65 Slot 551 is rese
31c0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
31d0: 20 35 35 32 20 69 73 20 72 65 73 65 72 76 65 64 552 is reserved
31e0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 35 33 */.+/* Slot 553
31f0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3200: 2b 2f 2a 20 35 35 34 20 2a 2f 0a 2b 45 58 54 45 +/* 554 */.+EXTE
3210: 52 4e 20 54 63 6c 5f 44 72 69 76 65 72 54 68 72 RN Tcl_DriverThr
3220: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a 20 eadActionProc *
3230: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 Tcl_ChannelThrea
3240: 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 4e 53 dActionProc _ANS
3250: 49 5f 41 52 47 53 5f 28 28 0a 2b 09 09 09 09 54 I_ARGS_((.+....T
3260: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a cl_ChannelType *
3270: 20 63 68 61 6e 54 79 70 65 50 74 72 29 29 3b 0a chanTypePtr));.
3280: 20 0a 20 74 79 70 65 64 65 66 20 73 74 72 75 63 . typedef struc
3290: 74 20 54 63 6c 53 74 75 62 48 6f 6f 6b 73 20 7b t TclStubHooks {
32a0: 0a 20 20 20 20 20 73 74 72 75 63 74 20 54 63 6c . struct Tcl
32b0: 50 6c 61 74 53 74 75 62 73 20 2a 74 63 6c 50 6c PlatStubs *tclPl
32c0: 61 74 53 74 75 62 73 3b 0a 40 40 20 2d 32 31 31 atStubs;.@@ -211
32d0: 37 2c 36 20 2b 32 31 38 30 2c 36 37 20 40 40 0a 7,6 +2180,67 @@.
32e0: 20 20 20 20 20 54 63 6c 5f 57 69 64 65 49 6e 74 Tcl_WideInt
32f0: 20 28 2a 74 63 6c 5f 53 65 65 6b 29 20 5f 41 4e (*tcl_Seek) _AN
3300: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 43 68 SI_ARGS_((Tcl_Ch
3310: 61 6e 6e 65 6c 20 63 68 61 6e 2c 20 54 63 6c 5f annel chan, Tcl_
3320: 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 20 WideInt offset,
3330: 69 6e 74 20 6d 6f 64 65 29 29 3b 20 2f 2a 20 34 int mode)); /* 4
3340: 39 31 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 57 91 */. Tcl_W
3350: 69 64 65 49 6e 74 20 28 2a 74 63 6c 5f 54 65 6c ideInt (*tcl_Tel
3360: 6c 29 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 l) _ANSI_ARGS_((
3370: 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e Tcl_Channel chan
3380: 29 29 3b 20 2f 2a 20 34 39 32 20 2a 2f 0a 20 20 )); /* 492 */.
3390: 20 20 20 54 63 6c 5f 44 72 69 76 65 72 57 69 64 Tcl_DriverWid
33a0: 65 53 65 65 6b 50 72 6f 63 20 2a 20 28 2a 74 63 eSeekProc * (*tc
33b0: 6c 5f 43 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 l_ChannelWideSee
33c0: 6b 50 72 6f 63 29 20 5f 41 4e 53 49 5f 41 52 47 kProc) _ANSI_ARG
33d0: 53 5f 28 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 S_((Tcl_ChannelT
33e0: 79 70 65 20 2a 20 63 68 61 6e 54 79 70 65 50 74 ype * chanTypePt
33f0: 72 29 29 3b 20 2f 2a 20 34 39 33 20 2a 2f 0a 2b r)); /* 493 */.+
3400: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3410: 65 64 34 39 34 3b 0a 2b 20 20 20 20 76 6f 69 64 ed494;.+ void
3420: 20 2a 72 65 73 65 72 76 65 64 34 39 35 3b 0a 2b *reserved495;.+
3430: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3440: 65 64 34 39 36 3b 0a 2b 20 20 20 20 76 6f 69 64 ed496;.+ void
3450: 20 2a 72 65 73 65 72 76 65 64 34 39 37 3b 0a 2b *reserved497;.+
3460: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3470: 65 64 34 39 38 3b 0a 2b 20 20 20 20 76 6f 69 64 ed498;.+ void
3480: 20 2a 72 65 73 65 72 76 65 64 34 39 39 3b 0a 2b *reserved499;.+
3490: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
34a0: 65 64 35 30 30 3b 0a 2b 20 20 20 20 76 6f 69 64 ed500;.+ void
34b0: 20 2a 72 65 73 65 72 76 65 64 35 30 31 3b 0a 2b *reserved501;.+
34c0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
34d0: 65 64 35 30 32 3b 0a 2b 20 20 20 20 76 6f 69 64 ed502;.+ void
34e0: 20 2a 72 65 73 65 72 76 65 64 35 30 33 3b 0a 2b *reserved503;.+
34f0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3500: 65 64 35 30 34 3b 0a 2b 20 20 20 20 76 6f 69 64 ed504;.+ void
3510: 20 2a 72 65 73 65 72 76 65 64 35 30 35 3b 0a 2b *reserved505;.+
3520: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3530: 65 64 35 30 36 3b 0a 2b 20 20 20 20 76 6f 69 64 ed506;.+ void
3540: 20 2a 72 65 73 65 72 76 65 64 35 30 37 3b 0a 2b *reserved507;.+
3550: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3560: 65 64 35 30 38 3b 0a 2b 20 20 20 20 76 6f 69 64 ed508;.+ void
3570: 20 2a 72 65 73 65 72 76 65 64 35 30 39 3b 0a 2b *reserved509;.+
3580: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3590: 65 64 35 31 30 3b 0a 2b 20 20 20 20 76 6f 69 64 ed510;.+ void
35a0: 20 2a 72 65 73 65 72 76 65 64 35 31 31 3b 0a 2b *reserved511;.+
35b0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
35c0: 65 64 35 31 32 3b 0a 2b 20 20 20 20 76 6f 69 64 ed512;.+ void
35d0: 20 2a 72 65 73 65 72 76 65 64 35 31 33 3b 0a 2b *reserved513;.+
35e0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
35f0: 65 64 35 31 34 3b 0a 2b 20 20 20 20 76 6f 69 64 ed514;.+ void
3600: 20 2a 72 65 73 65 72 76 65 64 35 31 35 3b 0a 2b *reserved515;.+
3610: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3620: 65 64 35 31 36 3b 0a 2b 20 20 20 20 76 6f 69 64 ed516;.+ void
3630: 20 2a 72 65 73 65 72 76 65 64 35 31 37 3b 0a 2b *reserved517;.+
3640: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3650: 65 64 35 31 38 3b 0a 2b 20 20 20 20 76 6f 69 64 ed518;.+ void
3660: 20 2a 72 65 73 65 72 76 65 64 35 31 39 3b 0a 2b *reserved519;.+
3670: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3680: 65 64 35 32 30 3b 0a 2b 20 20 20 20 76 6f 69 64 ed520;.+ void
3690: 20 2a 72 65 73 65 72 76 65 64 35 32 31 3b 0a 2b *reserved521;.+
36a0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
36b0: 65 64 35 32 32 3b 0a 2b 20 20 20 20 76 6f 69 64 ed522;.+ void
36c0: 20 2a 72 65 73 65 72 76 65 64 35 32 33 3b 0a 2b *reserved523;.+
36d0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
36e0: 65 64 35 32 34 3b 0a 2b 20 20 20 20 76 6f 69 64 ed524;.+ void
36f0: 20 2a 72 65 73 65 72 76 65 64 35 32 35 3b 0a 2b *reserved525;.+
3700: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3710: 65 64 35 32 36 3b 0a 2b 20 20 20 20 76 6f 69 64 ed526;.+ void
3720: 20 2a 72 65 73 65 72 76 65 64 35 32 37 3b 0a 2b *reserved527;.+
3730: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3740: 65 64 35 32 38 3b 0a 2b 20 20 20 20 76 6f 69 64 ed528;.+ void
3750: 20 2a 72 65 73 65 72 76 65 64 35 32 39 3b 0a 2b *reserved529;.+
3760: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3770: 65 64 35 33 30 3b 0a 2b 20 20 20 20 76 6f 69 64 ed530;.+ void
3780: 20 2a 72 65 73 65 72 76 65 64 35 33 31 3b 0a 2b *reserved531;.+
3790: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
37a0: 65 64 35 33 32 3b 0a 2b 20 20 20 20 76 6f 69 64 ed532;.+ void
37b0: 20 2a 72 65 73 65 72 76 65 64 35 33 33 3b 0a 2b *reserved533;.+
37c0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
37d0: 65 64 35 33 34 3b 0a 2b 20 20 20 20 76 6f 69 64 ed534;.+ void
37e0: 20 2a 72 65 73 65 72 76 65 64 35 33 35 3b 0a 2b *reserved535;.+
37f0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3800: 65 64 35 33 36 3b 0a 2b 20 20 20 20 76 6f 69 64 ed536;.+ void
3810: 20 2a 72 65 73 65 72 76 65 64 35 33 37 3b 0a 2b *reserved537;.+
3820: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3830: 65 64 35 33 38 3b 0a 2b 20 20 20 20 76 6f 69 64 ed538;.+ void
3840: 20 2a 72 65 73 65 72 76 65 64 35 33 39 3b 0a 2b *reserved539;.+
3850: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3860: 65 64 35 34 30 3b 0a 2b 20 20 20 20 76 6f 69 64 ed540;.+ void
3870: 20 2a 72 65 73 65 72 76 65 64 35 34 31 3b 0a 2b *reserved541;.+
3880: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3890: 65 64 35 34 32 3b 0a 2b 20 20 20 20 76 6f 69 64 ed542;.+ void
38a0: 20 2a 72 65 73 65 72 76 65 64 35 34 33 3b 0a 2b *reserved543;.+
38b0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
38c0: 65 64 35 34 34 3b 0a 2b 20 20 20 20 76 6f 69 64 ed544;.+ void
38d0: 20 2a 72 65 73 65 72 76 65 64 35 34 35 3b 0a 2b *reserved545;.+
38e0: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
38f0: 65 64 35 34 36 3b 0a 2b 20 20 20 20 76 6f 69 64 ed546;.+ void
3900: 20 2a 72 65 73 65 72 76 65 64 35 34 37 3b 0a 2b *reserved547;.+
3910: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3920: 65 64 35 34 38 3b 0a 2b 20 20 20 20 76 6f 69 64 ed548;.+ void
3930: 20 2a 72 65 73 65 72 76 65 64 35 34 39 3b 0a 2b *reserved549;.+
3940: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3950: 65 64 35 35 30 3b 0a 2b 20 20 20 20 76 6f 69 64 ed550;.+ void
3960: 20 2a 72 65 73 65 72 76 65 64 35 35 31 3b 0a 2b *reserved551;.+
3970: 20 20 20 20 76 6f 69 64 20 2a 72 65 73 65 72 76 void *reserv
3980: 65 64 35 35 32 3b 0a 2b 20 20 20 20 76 6f 69 64 ed552;.+ void
3990: 20 2a 72 65 73 65 72 76 65 64 35 35 33 3b 0a 2b *reserved553;.+
39a0: 20 20 20 20 54 63 6c 5f 44 72 69 76 65 72 54 68 Tcl_DriverTh
39b0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a readActionProc *
39c0: 20 28 2a 74 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 (*tcl_ChannelTh
39d0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 29 20 readActionProc)
39e0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c _ANSI_ARGS_((Tcl
39f0: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 20 63 _ChannelType * c
3a00: 68 61 6e 54 79 70 65 50 74 72 29 29 3b 20 2f 2a hanTypePtr)); /*
3a10: 20 35 35 34 20 2a 2f 0a 20 7d 20 54 63 6c 53 74 554 */. } TclSt
3a20: 75 62 73 3b 0a 20 0a 20 23 69 66 64 65 66 20 5f ubs;. . #ifdef _
3a30: 5f 63 70 6c 75 73 70 6c 75 73 0a 40 40 20 2d 34 _cplusplus.@@ -4
3a40: 31 33 33 2c 36 20 2b 34 32 35 37 2c 37 30 20 40 133,6 +4257,70 @
3a50: 40 0a 20 23 64 65 66 69 6e 65 20 54 63 6c 5f 43 @. #define Tcl_C
3a60: 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 hannelWideSeekPr
3a70: 6f 63 20 5c 0a 20 09 28 74 63 6c 53 74 75 62 73 oc \. .(tclStubs
3a80: 50 74 72 2d 3e 74 63 6c 5f 43 68 61 6e 6e 65 6c Ptr->tcl_Channel
3a90: 57 69 64 65 53 65 65 6b 50 72 6f 63 29 20 2f 2a WideSeekProc) /*
3aa0: 20 34 39 33 20 2a 2f 0a 20 23 65 6e 64 69 66 0a 493 */. #endif.
3ab0: 2b 2f 2a 20 53 6c 6f 74 20 34 39 34 20 69 73 20 +/* Slot 494 is
3ac0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3ad0: 53 6c 6f 74 20 34 39 35 20 69 73 20 72 65 73 65 Slot 495 is rese
3ae0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3af0: 20 34 39 36 20 69 73 20 72 65 73 65 72 76 65 64 496 is reserved
3b00: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 34 39 37 */.+/* Slot 497
3b10: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3b20: 2b 2f 2a 20 53 6c 6f 74 20 34 39 38 20 69 73 20 +/* Slot 498 is
3b30: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3b40: 53 6c 6f 74 20 34 39 39 20 69 73 20 72 65 73 65 Slot 499 is rese
3b50: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3b60: 20 35 30 30 20 69 73 20 72 65 73 65 72 76 65 64 500 is reserved
3b70: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 31 */.+/* Slot 501
3b80: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3b90: 2b 2f 2a 20 53 6c 6f 74 20 35 30 32 20 69 73 20 +/* Slot 502 is
3ba0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3bb0: 53 6c 6f 74 20 35 30 33 20 69 73 20 72 65 73 65 Slot 503 is rese
3bc0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3bd0: 20 35 30 34 20 69 73 20 72 65 73 65 72 76 65 64 504 is reserved
3be0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 35 */.+/* Slot 505
3bf0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3c00: 2b 2f 2a 20 53 6c 6f 74 20 35 30 36 20 69 73 20 +/* Slot 506 is
3c10: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3c20: 53 6c 6f 74 20 35 30 37 20 69 73 20 72 65 73 65 Slot 507 is rese
3c30: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3c40: 20 35 30 38 20 69 73 20 72 65 73 65 72 76 65 64 508 is reserved
3c50: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 30 39 */.+/* Slot 509
3c60: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3c70: 2b 2f 2a 20 53 6c 6f 74 20 35 31 30 20 69 73 20 +/* Slot 510 is
3c80: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3c90: 53 6c 6f 74 20 35 31 31 20 69 73 20 72 65 73 65 Slot 511 is rese
3ca0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3cb0: 20 35 31 32 20 69 73 20 72 65 73 65 72 76 65 64 512 is reserved
3cc0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 33 */.+/* Slot 513
3cd0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3ce0: 2b 2f 2a 20 53 6c 6f 74 20 35 31 34 20 69 73 20 +/* Slot 514 is
3cf0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3d00: 53 6c 6f 74 20 35 31 35 20 69 73 20 72 65 73 65 Slot 515 is rese
3d10: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3d20: 20 35 31 36 20 69 73 20 72 65 73 65 72 76 65 64 516 is reserved
3d30: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 31 37 */.+/* Slot 517
3d40: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3d50: 2b 2f 2a 20 53 6c 6f 74 20 35 31 38 20 69 73 20 +/* Slot 518 is
3d60: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3d70: 53 6c 6f 74 20 35 31 39 20 69 73 20 72 65 73 65 Slot 519 is rese
3d80: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3d90: 20 35 32 30 20 69 73 20 72 65 73 65 72 76 65 64 520 is reserved
3da0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 31 */.+/* Slot 521
3db0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3dc0: 2b 2f 2a 20 53 6c 6f 74 20 35 32 32 20 69 73 20 +/* Slot 522 is
3dd0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3de0: 53 6c 6f 74 20 35 32 33 20 69 73 20 72 65 73 65 Slot 523 is rese
3df0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3e00: 20 35 32 34 20 69 73 20 72 65 73 65 72 76 65 64 524 is reserved
3e10: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 35 */.+/* Slot 525
3e20: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3e30: 2b 2f 2a 20 53 6c 6f 74 20 35 32 36 20 69 73 20 +/* Slot 526 is
3e40: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3e50: 53 6c 6f 74 20 35 32 37 20 69 73 20 72 65 73 65 Slot 527 is rese
3e60: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3e70: 20 35 32 38 20 69 73 20 72 65 73 65 72 76 65 64 528 is reserved
3e80: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 32 39 */.+/* Slot 529
3e90: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3ea0: 2b 2f 2a 20 53 6c 6f 74 20 35 33 30 20 69 73 20 +/* Slot 530 is
3eb0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3ec0: 53 6c 6f 74 20 35 33 31 20 69 73 20 72 65 73 65 Slot 531 is rese
3ed0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3ee0: 20 35 33 32 20 69 73 20 72 65 73 65 72 76 65 64 532 is reserved
3ef0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 33 */.+/* Slot 533
3f00: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3f10: 2b 2f 2a 20 53 6c 6f 74 20 35 33 34 20 69 73 20 +/* Slot 534 is
3f20: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3f30: 53 6c 6f 74 20 35 33 35 20 69 73 20 72 65 73 65 Slot 535 is rese
3f40: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3f50: 20 35 33 36 20 69 73 20 72 65 73 65 72 76 65 64 536 is reserved
3f60: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 33 37 */.+/* Slot 537
3f70: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3f80: 2b 2f 2a 20 53 6c 6f 74 20 35 33 38 20 69 73 20 +/* Slot 538 is
3f90: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
3fa0: 53 6c 6f 74 20 35 33 39 20 69 73 20 72 65 73 65 Slot 539 is rese
3fb0: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
3fc0: 20 35 34 30 20 69 73 20 72 65 73 65 72 76 65 64 540 is reserved
3fd0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 31 */.+/* Slot 541
3fe0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
3ff0: 2b 2f 2a 20 53 6c 6f 74 20 35 34 32 20 69 73 20 +/* Slot 542 is
4000: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
4010: 53 6c 6f 74 20 35 34 33 20 69 73 20 72 65 73 65 Slot 543 is rese
4020: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
4030: 20 35 34 34 20 69 73 20 72 65 73 65 72 76 65 64 544 is reserved
4040: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 35 */.+/* Slot 545
4050: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
4060: 2b 2f 2a 20 53 6c 6f 74 20 35 34 36 20 69 73 20 +/* Slot 546 is
4070: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
4080: 53 6c 6f 74 20 35 34 37 20 69 73 20 72 65 73 65 Slot 547 is rese
4090: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
40a0: 20 35 34 38 20 69 73 20 72 65 73 65 72 76 65 64 548 is reserved
40b0: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 34 39 */.+/* Slot 549
40c0: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
40d0: 2b 2f 2a 20 53 6c 6f 74 20 35 35 30 20 69 73 20 +/* Slot 550 is
40e0: 72 65 73 65 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 reserved */.+/*
40f0: 53 6c 6f 74 20 35 35 31 20 69 73 20 72 65 73 65 Slot 551 is rese
4100: 72 76 65 64 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 rved */.+/* Slot
4110: 20 35 35 32 20 69 73 20 72 65 73 65 72 76 65 64 552 is reserved
4120: 20 2a 2f 0a 2b 2f 2a 20 53 6c 6f 74 20 35 35 33 */.+/* Slot 553
4130: 20 69 73 20 72 65 73 65 72 76 65 64 20 2a 2f 0a is reserved */.
4140: 2b 23 69 66 6e 64 65 66 20 54 63 6c 5f 43 68 61 +#ifndef Tcl_Cha
4150: 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e nnelThreadAction
4160: 50 72 6f 63 0a 2b 23 64 65 66 69 6e 65 20 54 63 Proc.+#define Tc
4170: 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 l_ChannelThreadA
4180: 63 74 69 6f 6e 50 72 6f 63 20 5c 0a 2b 09 28 74 ctionProc \.+.(t
4190: 63 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f clStubsPtr->tcl_
41a0: 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 ChannelThreadAct
41b0: 69 6f 6e 50 72 6f 63 29 20 2f 2a 20 35 35 34 20 ionProc) /* 554
41c0: 2a 2f 0a 2b 23 65 6e 64 69 66 0a 20 0a 20 23 65 */.+#endif. . #e
41d0: 6e 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28 ndif /* defined(
41e0: 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 20 26 USE_TCL_STUBS) &
41f0: 26 20 21 64 65 66 69 6e 65 64 28 55 53 45 5f 54 & !defined(USE_T
4200: 43 4c 5f 53 54 55 42 5f 50 52 4f 43 53 29 20 2a CL_STUB_PROCS) *
4210: 2f 0a 20 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 /. .Index: gener
4220: 69 63 2f 74 63 6c 49 4f 2e 63 0a 3d 3d 3d 3d 3d ic/tclIO.c.=====
4230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
4260: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
4270: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
4280: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 t/tcl/tcl/generi
4290: 63 2f 74 63 6c 49 4f 2e 63 2c 76 0a 72 65 74 72 c/tclIO.c,v.retr
42a0: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
42b0: 31 2e 36 31 2e 32 2e 38 0a 64 69 66 66 20 2d 77 1.61.2.8.diff -w
42c0: 20 2d 75 20 2d 72 31 2e 36 31 2e 32 2e 38 20 74 -u -r1.61.2.8 t
42d0: 63 6c 49 4f 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 clIO.c.--- gener
42e0: 69 63 2f 74 63 6c 49 4f 2e 63 09 31 30 20 53 65 ic/tclIO.c.10 Se
42f0: 70 20 32 30 30 34 20 32 30 3a 30 36 3a 34 31 20 p 2004 20:06:41
4300: 2d 30 30 30 30 09 31 2e 36 31 2e 32 2e 38 0a 2b -0000.1.61.2.8.+
4310: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f ++ generic/tclIO
4320: 2e 63 09 32 37 20 4a 61 6e 20 32 30 30 35 20 32 .c.27 Jan 2005 2
4330: 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 40 40 2:49:18 -0000.@@
4340: 20 2d 31 32 30 38 2c 31 38 20 2b 31 32 30 38 2c -1208,18 +1208,
4350: 31 39 20 40 40 0a 20 20 20 20 20 20 2a 20 69 6e 19 @@. * in
4360: 20 74 68 65 20 6c 69 73 74 20 6f 6e 20 65 78 69 the list on exi
4370: 74 2e 0a 20 20 20 20 20 20 2a 0a 20 20 20 20 20 t.. *.
4380: 20 2a 20 4a 48 3a 20 43 6f 75 6c 64 20 63 61 6c * JH: Could cal
4390: 6c 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e l Tcl_SpliceChan
43a0: 6e 65 6c 2c 20 62 75 74 20 6e 65 65 64 20 74 6f nel, but need to
43b0: 20 61 76 6f 69 64 20 4e 55 4c 4c 20 63 68 65 63 avoid NULL chec
43c0: 6b 2e 0a 2b 20 20 20 20 20 2a 0a 2b 20 20 20 20 k..+ *.+
43d0: 20 2a 20 54 49 50 20 23 32 31 38 2e 0a 2b 20 20 * TIP #218..+
43e0: 20 20 20 2a 20 41 4b 3a 20 4a 75 73 74 20 69 6e * AK: Just in
43f0: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 66 69 65 itialize the fie
4400: 6c 64 20 74 6f 20 4e 55 4c 4c 20 62 65 66 6f 72 ld to NULL befor
4410: 65 20 69 6e 76 6f 6b 69 6e 67 20 54 63 6c 5f 53 e invoking Tcl_S
4420: 70 6c 69 63 65 43 68 61 6e 6e 65 6c 0a 2b 20 20 pliceChannel.+
4430: 20 20 20 2a 20 20 20 20 20 57 65 20 6e 65 65 64 * We need
4440: 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e 6e Tcl_SpliceChann
4450: 65 6c 2c 20 66 6f 72 20 74 68 65 20 74 68 72 65 el, for the thre
4460: 61 64 41 63 74 69 6f 6e 20 63 61 6c 6c 73 2e 0a adAction calls..
4470: 2b 20 20 20 20 20 2a 20 20 20 20 20 54 68 65 72 + * Ther
4480: 65 20 69 73 20 6e 6f 20 72 65 61 6c 20 72 65 61 e is no real rea
4490: 73 6f 6e 20 74 6f 20 64 75 70 6c 69 63 61 74 65 son to duplicate
44a0: 20 61 6c 6c 20 6f 66 20 74 68 69 73 2e 0a 2b 20 all of this..+
44b0: 20 20 20 20 2a 20 4e 4f 54 45 3a 20 41 6c 6c 20 * NOTE: All
44c0: 64 72 69 76 65 72 73 20 75 73 69 6e 67 20 74 68 drivers using th
44d0: 72 65 61 64 20 61 63 74 69 6f 6e 73 20 6e 6f 77 read actions now
44e0: 20 68 61 76 65 20 74 6f 20 70 65 72 66 6f 72 6d have to perform
44f0: 20 74 68 65 69 72 20 54 53 44 0a 2b 20 20 20 20 their TSD.+
4500: 20 2a 20 20 20 20 20 20 20 6d 61 6e 69 70 75 6c * manipul
4510: 61 74 69 6f 6e 20 6f 6e 6c 79 20 69 6e 20 74 68 ation only in th
4520: 65 69 72 20 74 68 72 65 61 64 20 61 63 74 69 6f eir thread actio
4530: 6e 20 70 72 6f 63 2e 20 44 6f 69 6e 67 20 69 74 n proc. Doing it
4540: 20 77 68 65 6e 0a 2b 20 20 20 20 20 2a 20 20 20 when.+ *
4550: 20 20 20 20 63 72 65 61 74 69 6e 67 20 74 68 65 creating the
4560: 69 72 20 69 6e 73 74 61 6e 63 65 20 73 74 72 75 ir instance stru
4570: 63 74 75 72 65 73 20 77 69 6c 6c 20 63 6f 6c 6c ctures will coll
4580: 69 64 65 20 77 69 74 68 20 74 68 65 20 74 68 72 ide with the thr
4590: 65 61 64 0a 2b 20 20 20 20 20 2a 20 20 20 20 20 ead.+ *
45a0: 20 20 61 63 74 69 6f 6e 20 61 63 74 69 76 69 74 action activit
45b0: 79 20 61 6e 64 20 6c 65 61 64 20 74 6f 20 64 61 y and lead to da
45c0: 6d 61 67 65 64 20 6c 69 73 74 73 2e 0a 20 20 20 maged lists..
45d0: 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 73 74 61 */. .- sta
45e0: 74 65 50 74 72 2d 3e 6e 65 78 74 43 53 50 74 72 tePtr->nextCSPtr
45f0: 09 3d 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74 .= tsdPtr->first
4600: 43 53 50 74 72 3b 0a 2d 20 20 20 20 74 73 64 50 CSPtr;.- tsdP
4610: 74 72 2d 3e 66 69 72 73 74 43 53 50 74 72 09 3d tr->firstCSPtr.=
4620: 20 73 74 61 74 65 50 74 72 3b 0a 2d 0a 2d 20 20 statePtr;.-.-
4630: 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 54 49 50 /*.- * TIP
4640: 20 23 31 30 2e 20 4d 61 72 6b 20 74 68 65 20 63 #10. Mark the c
4650: 75 72 72 65 6e 74 20 74 68 72 65 61 64 20 61 73 urrent thread as
4660: 20 74 68 65 20 6f 6e 65 20 6d 61 6e 61 67 69 6e the one managin
4670: 67 20 74 68 65 20 6e 65 77 0a 2d 20 20 20 20 20 g the new.-
4680: 2a 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e * chann
4690: 65 6c 2e 20 4e 6f 74 65 3a 20 27 54 63 6c 5f 47 el. Note: 'Tcl_G
46a0: 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 27 etCurrentThread'
46b0: 20 72 65 74 75 72 6e 73 20 73 65 6e 73 69 62 6c returns sensibl
46c0: 65 0a 2d 20 20 20 20 20 2a 20 20 20 20 20 20 20 e.- *
46d0: 20 20 20 76 61 6c 75 65 73 20 65 76 65 6e 20 66 values even f
46e0: 6f 72 20 61 20 6e 6f 6e 2d 74 68 72 65 61 64 65 or a non-threade
46f0: 64 20 63 6f 72 65 2e 0a 2d 20 20 20 20 20 2a 2f d core..- */
4700: 0a 2d 0a 2d 20 20 20 20 73 74 61 74 65 50 74 72 .-.- statePtr
4710: 2d 3e 6d 61 6e 61 67 69 6e 67 54 68 72 65 61 64 ->managingThread
4720: 20 3d 20 54 63 6c 5f 47 65 74 43 75 72 72 65 6e = Tcl_GetCurren
4730: 74 54 68 72 65 61 64 20 28 29 3b 0a 2b 20 20 20 tThread ();.+
4740: 20 73 74 61 74 65 50 74 72 2d 3e 6e 65 78 74 43 statePtr->nextC
4750: 53 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 53 SPtr = (ChannelS
4760: 74 61 74 65 20 2a 29 20 4e 55 4c 4c 3b 0a 2b 20 tate *) NULL;.+
4770: 20 20 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 Tcl_SpliceCha
4780: 6e 6e 65 6c 20 28 28 54 63 6c 5f 43 68 61 6e 6e nnel ((Tcl_Chann
4790: 65 6c 29 20 63 68 61 6e 50 74 72 29 3b 0a 20 0a el) chanPtr);. .
47a0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 /*. *
47b0: 49 6e 73 74 61 6c 6c 20 74 68 69 73 20 63 68 61 Install this cha
47c0: 6e 6e 65 6c 20 69 6e 20 74 68 65 20 66 69 72 73 nnel in the firs
47d0: 74 20 65 6d 70 74 79 20 73 74 61 6e 64 61 72 64 t empty standard
47e0: 20 63 68 61 6e 6e 65 6c 20 73 6c 6f 74 2c 20 69 channel slot, i
47f0: 66 0a 40 40 20 2d 32 33 37 38 2c 37 20 2b 32 33 f.@@ -2378,7 +23
4800: 37 39 2c 37 20 40 40 0a 20 20 2a 09 52 65 73 65 79,7 @@. *.Rese
4810: 74 73 20 74 68 65 20 66 69 65 6c 64 20 27 6e 65 ts the field 'ne
4820: 78 74 43 53 50 74 72 27 20 6f 66 20 74 68 65 20 xtCSPtr' of the
4830: 73 70 65 63 69 66 69 65 64 20 63 68 61 6e 6e 65 specified channe
4840: 6c 20 73 74 61 74 65 20 74 6f 20 4e 55 4c 4c 2e l state to NULL.
4850: 0a 20 20 2a 0a 20 20 2a 20 4e 4f 54 45 3a 0a 2d . *. * NOTE:.-
4860: 20 2a 09 54 68 65 20 63 68 61 6e 6e 65 6c 20 74 *.The channel t
4870: 6f 20 73 70 6c 69 63 65 20 6f 75 74 20 6f 66 20 o splice out of
4880: 74 68 65 20 6c 69 73 74 20 6d 75 73 74 20 6e 6f the list must no
4890: 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 0a t be referenced.
48a0: 2b 20 2a 09 54 68 65 20 63 68 61 6e 6e 65 6c 20 + *.The channel
48b0: 74 6f 20 63 75 74 20 6f 75 74 20 6f 66 20 74 68 to cut out of th
48c0: 65 20 6c 69 73 74 20 6d 75 73 74 20 6e 6f 74 20 e list must not
48d0: 62 65 20 72 65 66 65 72 65 6e 63 65 64 0a 20 20 be referenced.
48e0: 2a 09 69 6e 20 61 6e 79 20 69 6e 74 65 72 70 72 *.in any interpr
48f0: 65 74 65 72 2e 20 54 68 69 73 20 69 73 20 73 6f eter. This is so
4900: 6d 65 74 68 69 6e 67 20 74 68 69 73 20 70 72 6f mething this pro
4910: 63 65 64 75 72 65 20 63 61 6e 6e 6f 74 0a 20 20 cedure cannot.
4920: 2a 09 63 68 65 63 6b 20 28 64 65 73 70 69 74 65 *.check (despite
4930: 20 74 68 65 20 72 65 66 63 6f 75 6e 74 29 20 62 the refcount) b
4940: 65 63 61 75 73 65 20 74 68 65 20 63 61 6c 6c 65 ecause the calle
4950: 72 20 75 73 75 61 6c 6c 79 20 77 61 6e 74 73 0a r usually wants.
4960: 20 20 2a 09 66 69 64 64 6c 65 20 77 69 74 68 20 *.fiddle with
4970: 74 68 65 20 63 68 61 6e 6e 65 6c 20 28 6c 69 6b the channel (lik
4980: 65 20 74 72 61 6e 73 66 65 72 69 6e 67 20 69 74 e transfering it
4990: 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e 74 0a to a different.
49a0: 40 40 20 2d 32 34 30 30 2c 36 20 2b 32 34 30 31 @@ -2400,6 +2401
49b0: 2c 37 20 40 40 0a 20 20 20 20 20 20 20 20 20 20 ,7 @@.
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
49e0: 2a 20 63 68 61 6e 6e 65 6c 20 6f 75 74 20 6f 66 * channel out of
49f0: 20 74 68 65 20 6c 69 73 74 20 6f 6e 20 63 6c 6f the list on clo
4a00: 73 65 2e 20 2a 2f 0a 20 20 20 20 20 43 68 61 6e se. */. Chan
4a10: 6e 65 6c 53 74 61 74 65 20 2a 73 74 61 74 65 50 nelState *stateP
4a20: 74 72 20 3d 20 28 28 43 68 61 6e 6e 65 6c 20 2a tr = ((Channel *
4a30: 29 20 63 68 61 6e 29 2d 3e 73 74 61 74 65 3b 0a ) chan)->state;.
4a40: 20 09 09 09 09 09 2f 2a 20 73 74 61 74 65 20 6f ...../* state o
4a50: 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 73 74 f the channel st
4a60: 61 63 6b 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c ack. */.+ Tcl
4a70: 5f 44 72 69 76 65 72 54 68 72 65 61 64 41 63 74 _DriverThreadAct
4a80: 69 6f 6e 50 72 6f 63 20 2a 74 68 72 65 61 64 41 ionProc *threadA
4a90: 63 74 69 6f 6e 50 72 6f 63 3b 0a 20 0a 20 20 20 ctionProc;. .
4aa0: 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 52 65 6d /*. * Rem
4ab0: 6f 76 65 20 74 68 69 73 20 63 68 61 6e 6e 65 6c ove this channel
4ac0: 20 66 72 6f 6d 20 6f 66 20 74 68 65 20 6c 69 73 from of the lis
4ad0: 74 20 6f 66 20 61 6c 6c 20 63 68 61 6e 6e 65 6c t of all channel
4ae0: 73 0a 40 40 20 2d 32 34 32 32 2c 37 20 2b 32 34 s.@@ -2422,7 +24
4af0: 32 34 2c 31 32 20 40 40 0a 20 0a 20 20 20 20 20 24,12 @@. .
4b00: 73 74 61 74 65 50 74 72 2d 3e 6e 65 78 74 43 53 statePtr->nextCS
4b10: 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 53 74 Ptr = (ChannelSt
4b20: 61 74 65 20 2a 29 20 4e 55 4c 4c 3b 0a 20 0a 2d ate *) NULL;. .-
4b30: 20 20 20 20 54 63 6c 70 43 75 74 46 69 6c 65 43 TclpCutFileC
4b40: 68 61 6e 6e 65 6c 28 63 68 61 6e 29 3b 0a 2b 20 hannel(chan);.+
4b50: 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2c 20 /* TIP #218,
4b60: 43 68 61 6e 6e 65 6c 20 54 68 72 65 61 64 20 41 Channel Thread A
4b70: 63 74 69 6f 6e 73 20 2a 2f 0a 2b 20 20 20 20 74 ctions */.+ t
4b80: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 hreadActionProc
4b90: 3d 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 = Tcl_ChannelThr
4ba0: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 54 eadActionProc (T
4bb0: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70 cl_GetChannelTyp
4bc0: 65 20 28 63 68 61 6e 29 29 3b 0a 2b 20 20 20 20 e (chan));.+
4bd0: 69 66 20 28 74 68 72 65 61 64 41 63 74 69 6f 6e if (threadAction
4be0: 50 72 6f 63 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a Proc != NULL) {.
4bf0: 2b 20 20 20 20 20 20 20 20 28 2a 74 68 72 65 61 + (*threa
4c00: 64 41 63 74 69 6f 6e 50 72 6f 63 29 20 28 54 63 dActionProc) (Tc
4c10: 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74 l_GetChannelInst
4c20: 61 6e 63 65 44 61 74 61 28 63 68 61 6e 29 2c 0a anceData(chan),.
4c30: 2b 09 09 09 20 20 20 20 20 54 43 4c 5f 43 48 41 +... TCL_CHA
4c40: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f NNEL_THREAD_REMO
4c50: 56 45 29 3b 0a 2b 20 20 20 20 7d 0a 20 7d 0a 20 VE);.+ }. }.
4c60: 0c 0a 20 2f 2a 0a 40 40 20 2d 32 34 34 31 2c 37 .. /*.@@ -2441,7
4c70: 20 2b 32 34 34 38 2c 37 20 40 40 0a 20 20 2a 09 +2448,7 @@. *.
4c80: 4e 6f 74 68 69 6e 67 2e 0a 20 20 2a 0a 20 20 2a Nothing.. *. *
4c90: 20 4e 4f 54 45 3a 0a 2d 20 2a 09 54 68 65 20 63 NOTE:.- *.The c
4ca0: 68 61 6e 6e 65 6c 20 74 6f 20 61 64 64 20 74 6f hannel to add to
4cb0: 20 74 68 65 20 6c 69 73 74 20 6d 75 73 74 20 6e the list must n
4cc0: 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 ot be referenced
4cd0: 20 69 6e 20 61 6e 79 0a 2b 20 2a 09 54 68 65 20 in any.+ *.The
4ce0: 63 68 61 6e 6e 65 6c 20 74 6f 20 73 70 6c 69 63 channel to splic
4cf0: 65 20 69 6e 74 6f 20 74 68 65 20 6c 69 73 74 20 e into the list
4d00: 6d 75 73 74 20 6e 6f 74 20 62 65 20 72 65 66 65 must not be refe
4d10: 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 20 20 renced in any.
4d20: 2a 09 69 6e 74 65 72 70 72 65 74 65 72 2e 20 54 *.interpreter. T
4d30: 68 69 73 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 his is something
4d40: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure
4d50: 63 61 6e 6e 6f 74 20 63 68 65 63 6b 0a 20 20 2a cannot check. *
4d60: 09 28 64 65 73 70 69 74 65 20 74 68 65 20 72 65 .(despite the re
4d70: 66 63 6f 75 6e 74 29 20 62 65 63 61 75 73 65 20 fcount) because
4d80: 74 68 65 20 63 61 6c 6c 65 72 20 75 73 75 61 6c the caller usual
4d90: 6c 79 20 77 61 6e 74 73 20 66 69 67 67 6c 65 0a ly wants figgle.
4da0: 20 20 2a 09 77 69 74 68 20 74 68 65 20 63 68 61 *.with the cha
4db0: 6e 6e 65 6c 20 28 6c 69 6b 65 20 74 72 61 6e 73 nnel (like trans
4dc0: 66 65 72 69 6e 67 20 69 74 20 74 6f 20 61 20 64 fering it to a d
4dd0: 69 66 66 65 72 65 6e 74 20 74 68 72 65 61 64 29 ifferent thread)
4de0: 0a 40 40 20 2d 32 34 35 39 2c 36 20 2b 32 34 36 .@@ -2459,6 +246
4df0: 36 2c 37 20 40 40 0a 20 7b 0a 20 20 20 20 20 54 6,7 @@. {. T
4e00: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 hreadSpecificDat
4e10: 61 09 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f a.*tsdPtr = TCL_
4e20: 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 TSD_INIT(&dataKe
4e30: 79 29 3b 0a 20 20 20 20 20 43 68 61 6e 6e 65 6c y);. Channel
4e40: 53 74 61 74 65 09 2a 73 74 61 74 65 50 74 72 20 State.*statePtr
4e50: 3d 20 28 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63 = ((Channel *) c
4e60: 68 61 6e 29 2d 3e 73 74 61 74 65 3b 0a 2b 20 20 han)->state;.+
4e70: 20 20 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 Tcl_DriverThre
4e80: 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a 74 68 adActionProc *th
4e90: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 3b 0a readActionProc;.
4ea0: 20 0a 20 20 20 20 20 69 66 20 28 73 74 61 74 65 . if (state
4eb0: 50 74 72 2d 3e 6e 65 78 74 43 53 50 74 72 20 21 Ptr->nextCSPtr !
4ec0: 3d 20 28 43 68 61 6e 6e 65 6c 53 74 61 74 65 20 = (ChannelState
4ed0: 2a 29 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 *) NULL) {.
4ee0: 20 20 20 20 70 61 6e 69 63 28 22 54 63 6c 5f 53 panic("Tcl_S
4ef0: 70 6c 69 63 65 43 68 61 6e 6e 65 6c 3a 20 74 72 pliceChannel: tr
4f00: 79 69 6e 67 20 74 6f 20 61 64 64 20 63 68 61 6e ying to add chan
4f10: 6e 65 6c 20 75 73 65 64 20 69 6e 20 64 69 66 66 nel used in diff
4f20: 65 72 65 6e 74 20 6c 69 73 74 22 29 3b 0a 40 40 erent list");.@@
4f30: 20 2d 32 34 37 35 2c 37 20 2b 32 34 38 33 2c 31 -2475,7 +2483,1
4f40: 32 20 40 40 0a 20 0a 20 20 20 20 20 73 74 61 74 2 @@. . stat
4f50: 65 50 74 72 2d 3e 6d 61 6e 61 67 69 6e 67 54 68 ePtr->managingTh
4f60: 72 65 61 64 20 3d 20 54 63 6c 5f 47 65 74 43 75 read = Tcl_GetCu
4f70: 72 72 65 6e 74 54 68 72 65 61 64 20 28 29 3b 0a rrentThread ();.
4f80: 20 0a 2d 20 20 20 20 54 63 6c 70 53 70 6c 69 63 .- TclpSplic
4f90: 65 46 69 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61 eFileChannel(cha
4fa0: 6e 29 3b 0a 2b 20 20 20 20 2f 2a 20 54 49 50 20 n);.+ /* TIP
4fb0: 23 32 31 38 2c 20 43 68 61 6e 6e 65 6c 20 54 68 #218, Channel Th
4fc0: 72 65 61 64 20 41 63 74 69 6f 6e 73 20 2a 2f 0a read Actions */.
4fd0: 2b 20 20 20 20 74 68 72 65 61 64 41 63 74 69 6f + threadActio
4fe0: 6e 50 72 6f 63 20 3d 20 54 63 6c 5f 43 68 61 6e nProc = Tcl_Chan
4ff0: 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 nelThreadActionP
5000: 72 6f 63 20 28 54 63 6c 5f 47 65 74 43 68 61 6e roc (Tcl_GetChan
5010: 6e 65 6c 54 79 70 65 20 28 63 68 61 6e 29 29 3b nelType (chan));
5020: 0a 2b 20 20 20 20 69 66 20 28 74 68 72 65 61 64 .+ if (thread
5030: 41 63 74 69 6f 6e 50 72 6f 63 20 21 3d 20 4e 55 ActionProc != NU
5040: 4c 4c 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 28 LL) {.+ (
5050: 2a 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f *threadActionPro
5060: 63 29 20 28 54 63 6c 5f 47 65 74 43 68 61 6e 6e c) (Tcl_GetChann
5070: 65 6c 49 6e 73 74 61 6e 63 65 44 61 74 61 28 63 elInstanceData(c
5080: 68 61 6e 29 2c 0a 2b 09 09 09 20 20 20 20 20 54 han),.+... T
5090: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41 CL_CHANNEL_THREA
50a0: 44 5f 49 4e 53 45 52 54 29 3b 0a 2b 20 20 20 20 D_INSERT);.+
50b0: 7d 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d }. }. .. /*.@@ -
50c0: 38 39 30 32 2c 36 20 2b 38 39 31 35 2c 38 20 40 8902,6 +8915,8 @
50d0: 40 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 43 @. .return TCL_C
50e0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 HANNEL_VERSION_2
50f0: 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 ;. } else if
5100: 20 28 63 68 61 6e 54 79 70 65 50 74 72 2d 3e 76 (chanTypePtr->v
5110: 65 72 73 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 ersion == TCL_CH
5120: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 29 ANNEL_VERSION_3)
5130: 20 7b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f {. .return TCL_
5140: 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f CHANNEL_VERSION_
5150: 33 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 3;.+ } else i
5160: 66 20 28 63 68 61 6e 54 79 70 65 50 74 72 2d 3e f (chanTypePtr->
5170: 76 65 72 73 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 version == TCL_C
5180: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 HANNEL_VERSION_4
5190: 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c ) {.+.return TCL
51a0: 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e _CHANNEL_VERSION
51b0: 5f 34 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 _4;. } else
51c0: 7b 0a 20 09 2f 2a 0a 20 09 20 2a 20 49 6e 20 3c {. ./*. . * In <
51d0: 76 32 20 63 68 61 6e 6e 65 6c 20 76 65 72 73 69 v2 channel versi
51e0: 6f 6e 73 2c 20 74 68 65 20 76 65 72 73 69 6f 6e ons, the version
51f0: 20 66 69 65 6c 64 20 69 73 20 6f 63 63 75 70 69 field is occupi
5200: 65 64 0a 40 40 20 2d 39 32 35 35 2c 36 20 2b 39 ed.@@ -9255,6 +9
5210: 32 37 30 2c 33 33 20 40 40 0a 20 20 20 20 20 7d 270,33 @@. }
5220: 0a 20 7d 0a 20 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d . }. .+/*.+ *---
5230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5270: 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 54 63 6c 5f ---.+ *.+ * Tcl_
5280: 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 ChannelThreadAct
5290: 69 6f 6e 50 72 6f 63 20 2d 2d 0a 2b 20 2a 0a 2b ionProc --.+ *.+
52a0: 20 2a 09 52 65 74 75 72 6e 20 74 68 65 20 54 63 *.Return the Tc
52b0: 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64 41 63 l_DriverThreadAc
52c0: 74 69 6f 6e 50 72 6f 63 20 6f 66 20 74 68 65 20 tionProc of the
52d0: 63 68 61 6e 6e 65 6c 20 74 79 70 65 2e 0a 2b 20 channel type..+
52e0: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b *.+ * Results:.+
52f0: 20 2a 09 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 *.A pointer to
5300: 74 68 65 20 70 72 6f 63 2e 0a 2b 20 2a 0a 2b 20 the proc..+ *.+
5310: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a * Side effects:.
5320: 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 + *.None..+ *.+
5330: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
5340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5370: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b -------.+ */.+.+
5380: 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64 Tcl_DriverThread
5390: 41 63 74 69 6f 6e 50 72 6f 63 20 2a 0a 2b 54 63 ActionProc *.+Tc
53a0: 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 l_ChannelThreadA
53b0: 63 74 69 6f 6e 50 72 6f 63 28 63 68 61 6e 54 79 ctionProc(chanTy
53c0: 70 65 50 74 72 29 0a 2b 20 20 20 20 54 63 6c 5f pePtr).+ Tcl_
53d0: 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 63 68 61 ChannelType *cha
53e0: 6e 54 79 70 65 50 74 72 3b 09 2f 2a 20 50 6f 69 nTypePtr;./* Poi
53f0: 6e 74 65 72 20 74 6f 20 63 68 61 6e 6e 65 6c 20 nter to channel
5400: 74 79 70 65 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 type. */.+{.+
5410: 20 69 66 20 28 48 61 76 65 56 65 72 73 69 6f 6e if (HaveVersion
5420: 28 63 68 61 6e 54 79 70 65 50 74 72 2c 20 54 43 (chanTypePtr, TC
5430: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
5440: 4e 5f 34 29 29 20 7b 0a 2b 09 72 65 74 75 72 6e N_4)) {.+.return
5450: 20 63 68 61 6e 54 79 70 65 50 74 72 2d 3e 74 68 chanTypePtr->th
5460: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 3b 0a readActionProc;.
5470: 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 + } else {.+.
5480: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 20 20 return NULL;.+
5490: 20 20 7d 0a 2b 7d 0a 2b 0a 20 23 69 66 20 30 0a }.+}.+. #if 0.
54a0: 20 2f 2a 20 46 6f 72 20 66 75 74 75 72 65 20 64 /* For future d
54b0: 65 62 75 67 67 69 6e 67 20 77 6f 72 6b 2c 20 61 ebugging work, a
54c0: 20 73 69 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e simple function
54d0: 20 74 6f 20 70 72 69 6e 74 20 74 68 65 20 66 6c to print the fl
54e0: 61 67 73 20 6f 66 0a 20 20 2a 20 61 20 63 68 61 ags of. * a cha
54f0: 6e 6e 65 6c 20 69 6e 20 73 65 6d 69 2d 72 65 61 nnel in semi-rea
5500: 64 61 62 6c 65 20 66 6f 72 6d 2e 0a 49 6e 64 65 dable form..Inde
5510: 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e x: generic/tclIn
5520: 74 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d t.h.============
5530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5540: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5550: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5560: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 =======.RCS file
5570: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 : /cvsroot/tcl/t
5580: 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e cl/generic/tclIn
5590: 74 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 t.h,v.retrieving
55a0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 31 38 2e revision 1.118.
55b0: 32 2e 37 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 2.7.diff -w -u -
55c0: 72 31 2e 31 31 38 2e 32 2e 37 20 74 63 6c 49 6e r1.118.2.7 tclIn
55d0: 74 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f t.h.--- generic/
55e0: 74 63 6c 49 6e 74 2e 68 09 32 31 20 4a 75 6c 20 tclInt.h.21 Jul
55f0: 32 30 30 34 20 30 31 3a 33 30 3a 35 37 20 2d 30 2004 01:30:57 -0
5600: 30 30 30 09 31 2e 31 31 38 2e 32 2e 37 0a 2b 2b 000.1.118.2.7.++
5610: 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 + generic/tclInt
5620: 2e 68 09 32 37 20 4a 61 6e 20 32 30 30 35 20 32 .h.27 Jan 2005 2
5630: 32 3a 34 39 3a 31 38 20 2d 30 30 30 30 0a 40 40 2:49:18 -0000.@@
5640: 20 2d 31 37 34 39 2c 38 20 2b 31 37 34 39 2c 36 -1749,8 +1749,6
5650: 20 40 40 0a 20 45 58 54 45 52 4e 20 54 63 6c 5f @@. EXTERN Tcl_
5660: 43 68 61 6e 6e 65 6c 09 54 63 6c 70 4f 70 65 6e Channel.TclpOpen
5670: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 5f 41 4e 53 FileChannel _ANS
5680: 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 49 6e 74 I_ARGS_((Tcl_Int
5690: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 09 09 erp *interp,. ..
56a0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 . Tcl_Obj *pa
56b0: 74 68 50 74 72 2c 20 69 6e 74 20 6d 6f 64 65 2c thPtr, int mode,
56c0: 0a 20 09 09 09 20 20 20 20 69 6e 74 20 70 65 72 . ... int per
56d0: 6d 69 73 73 69 6f 6e 73 29 29 3b 0a 2d 45 58 54 missions));.-EXT
56e0: 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 70 43 75 ERN void..TclpCu
56f0: 74 46 69 6c 65 43 68 61 6e 6e 65 6c 20 5f 41 4e tFileChannel _AN
5700: 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f 43 68 SI_ARGS_((Tcl_Ch
5710: 61 6e 6e 65 6c 20 63 68 61 6e 29 29 3b 0a 2d 45 annel chan));.-E
5720: 58 54 45 52 4e 20 76 6f 69 64 09 09 54 63 6c 70 XTERN void..Tclp
5730: 53 70 6c 69 63 65 46 69 6c 65 43 68 61 6e 6e 65 SpliceFileChanne
5740: 6c 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 l _ANSI_ARGS_((T
5750: 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 29 cl_Channel chan)
5760: 29 3b 0a 20 45 58 54 45 52 4e 20 76 6f 69 64 09 );. EXTERN void.
5770: 09 54 63 6c 70 50 61 6e 69 63 20 5f 41 4e 53 49 .TclpPanic _ANSI
5780: 5f 41 52 47 53 5f 28 54 43 4c 5f 56 41 52 41 52 _ARGS_(TCL_VARAR
5790: 47 53 28 43 4f 4e 53 54 20 63 68 61 72 20 2a 2c GS(CONST char *,
57a0: 0a 20 09 09 09 20 20 20 20 66 6f 72 6d 61 74 29 . ... format)
57b0: 29 3b 0a 20 45 58 54 45 52 4e 20 63 68 61 72 20 );. EXTERN char
57c0: 2a 09 09 54 63 6c 70 52 65 61 64 6c 69 6e 6b 20 *..TclpReadlink
57d0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 4f 4e _ANSI_ARGS_((CON
57e0: 53 54 20 63 68 61 72 20 2a 66 69 6c 65 4e 61 6d ST char *fileNam
57f0: 65 2c 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 e,.Index: generi
5800: 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 0a c/tclStubInit.c.
5810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5850: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 ===.RCS file: /c
5860: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 vsroot/tcl/tcl/g
5870: 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 49 6e eneric/tclStubIn
5880: 69 74 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e it.c,v.retrievin
5890: 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 37 39 2e g revision 1.79.
58a0: 32 2e 38 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 2.8.diff -w -u -
58b0: 72 31 2e 37 39 2e 32 2e 38 20 74 63 6c 53 74 75 r1.79.2.8 tclStu
58c0: 62 49 6e 69 74 2e 63 0a 2d 2d 2d 20 67 65 6e 65 bInit.c.--- gene
58d0: 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e ric/tclStubInit.
58e0: 63 09 31 34 20 4f 63 74 20 32 30 30 34 20 31 35 c.14 Oct 2004 15
58f0: 3a 33 30 3a 35 32 20 2d 30 30 30 30 09 31 2e 37 :30:52 -0000.1.7
5900: 39 2e 32 2e 38 0a 2b 2b 2b 20 67 65 6e 65 72 69 9.2.8.+++ generi
5910: 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 09 c/tclStubInit.c.
5920: 32 37 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 27 Jan 2005 22:4
5930: 39 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 39 9:19 -0000.@@ -9
5940: 35 33 2c 36 20 2b 39 35 33 2c 36 37 20 40 40 0a 53,6 +953,67 @@.
5950: 20 20 20 20 20 54 63 6c 5f 53 65 65 6b 2c 20 2f Tcl_Seek, /
5960: 2a 20 34 39 31 20 2a 2f 0a 20 20 20 20 20 54 63 * 491 */. Tc
5970: 6c 5f 54 65 6c 6c 2c 20 2f 2a 20 34 39 32 20 2a l_Tell, /* 492 *
5980: 2f 0a 20 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e /. Tcl_Chann
5990: 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 2c 20 elWideSeekProc,
59a0: 2f 2a 20 34 39 33 20 2a 2f 0a 2b 20 20 20 20 4e /* 493 */.+ N
59b0: 55 4c 4c 2c 20 2f 2a 20 34 39 34 20 2a 2f 0a 2b ULL, /* 494 */.+
59c0: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 34 39 35 NULL, /* 495
59d0: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f */.+ NULL, /
59e0: 2a 20 34 39 36 20 2a 2f 0a 2b 20 20 20 20 4e 55 * 496 */.+ NU
59f0: 4c 4c 2c 20 2f 2a 20 34 39 37 20 2a 2f 0a 2b 20 LL, /* 497 */.+
5a00: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 34 39 38 20 NULL, /* 498
5a10: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a */.+ NULL, /*
5a20: 20 34 39 39 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 499 */.+ NUL
5a30: 4c 2c 20 2f 2a 20 35 30 30 20 2a 2f 0a 2b 20 20 L, /* 500 */.+
5a40: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 30 31 20 2a NULL, /* 501 *
5a50: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 /.+ NULL, /*
5a60: 35 30 32 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 502 */.+ NULL
5a70: 2c 20 2f 2a 20 35 30 33 20 2a 2f 0a 2b 20 20 20 , /* 503 */.+
5a80: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 30 34 20 2a 2f NULL, /* 504 */
5a90: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 .+ NULL, /* 5
5aa0: 30 35 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 05 */.+ NULL,
5ab0: 20 2f 2a 20 35 30 36 20 2a 2f 0a 2b 20 20 20 20 /* 506 */.+
5ac0: 4e 55 4c 4c 2c 20 2f 2a 20 35 30 37 20 2a 2f 0a NULL, /* 507 */.
5ad0: 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 30 + NULL, /* 50
5ae0: 38 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 8 */.+ NULL,
5af0: 2f 2a 20 35 30 39 20 2a 2f 0a 2b 20 20 20 20 4e /* 509 */.+ N
5b00: 55 4c 4c 2c 20 2f 2a 20 35 31 30 20 2a 2f 0a 2b ULL, /* 510 */.+
5b10: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 31 31 NULL, /* 511
5b20: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f */.+ NULL, /
5b30: 2a 20 35 31 32 20 2a 2f 0a 2b 20 20 20 20 4e 55 * 512 */.+ NU
5b40: 4c 4c 2c 20 2f 2a 20 35 31 33 20 2a 2f 0a 2b 20 LL, /* 513 */.+
5b50: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 31 34 20 NULL, /* 514
5b60: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a */.+ NULL, /*
5b70: 20 35 31 35 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 515 */.+ NUL
5b80: 4c 2c 20 2f 2a 20 35 31 36 20 2a 2f 0a 2b 20 20 L, /* 516 */.+
5b90: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 31 37 20 2a NULL, /* 517 *
5ba0: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 /.+ NULL, /*
5bb0: 35 31 38 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 518 */.+ NULL
5bc0: 2c 20 2f 2a 20 35 31 39 20 2a 2f 0a 2b 20 20 20 , /* 519 */.+
5bd0: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 32 30 20 2a 2f NULL, /* 520 */
5be0: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 .+ NULL, /* 5
5bf0: 32 31 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 21 */.+ NULL,
5c00: 20 2f 2a 20 35 32 32 20 2a 2f 0a 2b 20 20 20 20 /* 522 */.+
5c10: 4e 55 4c 4c 2c 20 2f 2a 20 35 32 33 20 2a 2f 0a NULL, /* 523 */.
5c20: 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 32 + NULL, /* 52
5c30: 34 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 4 */.+ NULL,
5c40: 2f 2a 20 35 32 35 20 2a 2f 0a 2b 20 20 20 20 4e /* 525 */.+ N
5c50: 55 4c 4c 2c 20 2f 2a 20 35 32 36 20 2a 2f 0a 2b ULL, /* 526 */.+
5c60: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 32 37 NULL, /* 527
5c70: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f */.+ NULL, /
5c80: 2a 20 35 32 38 20 2a 2f 0a 2b 20 20 20 20 4e 55 * 528 */.+ NU
5c90: 4c 4c 2c 20 2f 2a 20 35 32 39 20 2a 2f 0a 2b 20 LL, /* 529 */.+
5ca0: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 33 30 20 NULL, /* 530
5cb0: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a */.+ NULL, /*
5cc0: 20 35 33 31 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 531 */.+ NUL
5cd0: 4c 2c 20 2f 2a 20 35 33 32 20 2a 2f 0a 2b 20 20 L, /* 532 */.+
5ce0: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 33 33 20 2a NULL, /* 533 *
5cf0: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 /.+ NULL, /*
5d00: 35 33 34 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 534 */.+ NULL
5d10: 2c 20 2f 2a 20 35 33 35 20 2a 2f 0a 2b 20 20 20 , /* 535 */.+
5d20: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 33 36 20 2a 2f NULL, /* 536 */
5d30: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 .+ NULL, /* 5
5d40: 33 37 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 37 */.+ NULL,
5d50: 20 2f 2a 20 35 33 38 20 2a 2f 0a 2b 20 20 20 20 /* 538 */.+
5d60: 4e 55 4c 4c 2c 20 2f 2a 20 35 33 39 20 2a 2f 0a NULL, /* 539 */.
5d70: 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 + NULL, /* 54
5d80: 30 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 0 */.+ NULL,
5d90: 2f 2a 20 35 34 31 20 2a 2f 0a 2b 20 20 20 20 4e /* 541 */.+ N
5da0: 55 4c 4c 2c 20 2f 2a 20 35 34 32 20 2a 2f 0a 2b ULL, /* 542 */.+
5db0: 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 33 NULL, /* 543
5dc0: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f */.+ NULL, /
5dd0: 2a 20 35 34 34 20 2a 2f 0a 2b 20 20 20 20 4e 55 * 544 */.+ NU
5de0: 4c 4c 2c 20 2f 2a 20 35 34 35 20 2a 2f 0a 2b 20 LL, /* 545 */.+
5df0: 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 36 20 NULL, /* 546
5e00: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a */.+ NULL, /*
5e10: 20 35 34 37 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 547 */.+ NUL
5e20: 4c 2c 20 2f 2a 20 35 34 38 20 2a 2f 0a 2b 20 20 L, /* 548 */.+
5e30: 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 34 39 20 2a NULL, /* 549 *
5e40: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 /.+ NULL, /*
5e50: 35 35 30 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 550 */.+ NULL
5e60: 2c 20 2f 2a 20 35 35 31 20 2a 2f 0a 2b 20 20 20 , /* 551 */.+
5e70: 20 4e 55 4c 4c 2c 20 2f 2a 20 35 35 32 20 2a 2f NULL, /* 552 */
5e80: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 2f 2a 20 35 .+ NULL, /* 5
5e90: 35 33 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 43 53 */.+ Tcl_C
5ea0: 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 hannelThreadActi
5eb0: 6f 6e 50 72 6f 63 2c 20 2f 2a 20 35 35 34 20 2a onProc, /* 554 *
5ec0: 2f 0a 20 7d 3b 0a 20 0a 20 2f 2a 20 21 45 4e 44 /. };. . /* !END
5ed0: 21 3a 20 44 6f 20 6e 6f 74 20 65 64 69 74 20 61 !: Do not edit a
5ee0: 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 2e 20 bove this line.
5ef0: 2a 2f 0a 49 6e 64 65 78 3a 20 6d 61 63 2f 74 63 */.Index: mac/tc
5f00: 6c 4d 61 63 43 68 61 6e 2e 63 0a 3d 3d 3d 3d 3d lMacChan.c.=====
5f10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5f20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5f30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5f40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 ==============.R
5f50: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f CS file: /cvsroo
5f60: 74 2f 74 63 6c 2f 74 63 6c 2f 6d 61 63 2f 41 74 t/tcl/tcl/mac/At
5f70: 74 69 63 2f 74 63 6c 4d 61 63 43 68 61 6e 2e 63 tic/tclMacChan.c
5f80: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 ,v.retrieving re
5f90: 76 69 73 69 6f 6e 20 31 2e 32 31 0a 64 69 66 66 vision 1.21.diff
5fa0: 20 2d 77 20 2d 75 20 2d 72 31 2e 32 31 20 74 63 -w -u -r1.21 tc
5fb0: 6c 4d 61 63 43 68 61 6e 2e 63 0a 2d 2d 2d 20 6d lMacChan.c.--- m
5fc0: 61 63 2f 74 63 6c 4d 61 63 43 68 61 6e 2e 63 09 ac/tclMacChan.c.
5fd0: 33 20 4d 61 72 20 32 30 30 33 20 32 30 3a 32 32 3 Mar 2003 20:22
5fe0: 3a 34 32 20 2d 30 30 30 30 09 31 2e 32 31 0a 2b :42 -0000.1.21.+
5ff0: 2b 2b 20 6d 61 63 2f 74 63 6c 4d 61 63 43 68 61 ++ mac/tclMacCha
6000: 6e 2e 63 09 32 37 20 4a 61 6e 20 32 30 30 35 20 n.c.27 Jan 2005
6010: 32 32 3a 34 39 3a 31 39 20 2d 30 30 30 30 0a 40 22:49:19 -0000.@
6020: 40 20 2d 31 30 32 2c 36 20 2b 31 30 32 2c 38 20 @ -102,6 +102,8
6030: 40 40 0a 20 09 09 09 20 20 20 20 6c 6f 6e 67 20 @@. ... long
6040: 6f 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 65 offset, int mode
6050: 2c 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 , int *errorCode
6060: 29 29 3b 0a 20 73 74 61 74 69 63 20 76 6f 69 64 ));. static void
6070: 09 09 46 69 6c 65 53 65 74 75 70 50 72 6f 63 20 ..FileSetupProc
6080: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 _ANSI_ARGS_((Cli
6090: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
60a0: 74 61 2c 0a 20 09 09 09 20 20 20 20 69 6e 74 20 ta,. ... int
60b0: 66 6c 61 67 73 29 29 3b 0a 2b 73 74 61 74 69 63 flags));.+static
60c0: 20 76 6f 69 64 20 20 20 20 20 20 20 20 20 20 20 void
60d0: 20 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 FileThreadActi
60e0: 6f 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 onProc _ANSI_ARG
60f0: 53 5f 20 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 S_ ((.+... Cli
6100: 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 entData instance
6110: 44 61 74 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e Data, int action
6120: 29 29 3b 0a 20 73 74 61 74 69 63 20 54 63 6c 5f ));. static Tcl_
6130: 43 68 61 6e 6e 65 6c 09 4f 70 65 6e 46 69 6c 65 Channel.OpenFile
6140: 43 68 61 6e 6e 65 6c 20 5f 41 4e 53 49 5f 41 52 Channel _ANSI_AR
6150: 47 53 5f 28 28 43 4f 4e 53 54 20 63 68 61 72 20 GS_((CONST char
6160: 2a 66 69 6c 65 4e 61 6d 65 2c 20 0a 20 09 09 09 *fileName, . ...
6170: 20 20 20 20 69 6e 74 20 6d 6f 64 65 2c 20 69 6e int mode, in
6180: 74 20 70 65 72 6d 69 73 73 69 6f 6e 73 2c 20 69 t permissions, i
6190: 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50 74 72 nt *errorCodePtr
61a0: 29 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 ));. static int.
61b0: 09 53 74 64 49 4f 42 6c 6f 63 6b 4d 6f 64 65 20 .StdIOBlockMode
61c0: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 _ANSI_ARGS_((Cli
61d0: 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 entData instance
61e0: 44 61 74 61 2c 0a 40 40 20 2d 31 32 33 2c 37 20 Data,.@@ -123,7
61f0: 2b 31 32 35 2c 37 20 40 40 0a 20 0a 20 73 74 61 +125,7 @@. . sta
6200: 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 tic Tcl_ChannelT
6210: 79 70 65 20 63 6f 6e 73 6f 6c 65 43 68 61 6e 6e ype consoleChann
6220: 65 6c 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 elType = {.
6230: 22 66 69 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70 "file",.../* Typ
6240: 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 e name. */.-
6250: 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 (Tcl_ChannelType
6260: 56 65 72 73 69 6f 6e 29 53 74 64 49 4f 42 6c 6f Version)StdIOBlo
6270: 63 6b 4d 6f 64 65 2c 09 09 2f 2a 20 53 65 74 20 ckMode,../* Set
6280: 62 6c 6f 63 6b 69 6e 67 2f 6e 6f 6e 62 6c 6f 63 blocking/nonbloc
6290: 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 2b 20 20 king mode.*/.+
62a0: 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 TCL_CHANNEL_VE
62b0: 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 RSION_4,./* v4 c
62c0: 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 53 hannel */. S
62d0: 74 64 49 4f 43 6c 6f 73 65 2c 09 09 09 2f 2a 20 tdIOClose,.../*
62e0: 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 Close proc. */.
62f0: 20 20 20 20 53 74 64 49 4f 49 6e 70 75 74 2c 09 StdIOInput,.
6300: 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e ../* Input proc.
6310: 20 2a 2f 0a 20 20 20 20 20 53 74 64 49 4f 4f 75 */. StdIOOu
6320: 74 70 75 74 2c 09 09 2f 2a 20 4f 75 74 70 75 74 tput,../* Output
6330: 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 31 33 proc. */.@@ -13
6340: 32 2c 36 20 2b 31 33 34 2c 31 32 20 40 40 0a 20 2,6 +134,12 @@.
6350: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 47 NULL,.../* G
6360: 65 74 20 6f 70 74 69 6f 6e 20 70 72 6f 63 2e 20 et option proc.
6370: 2a 2f 0a 20 20 20 20 20 43 6f 6d 6d 6f 6e 57 61 */. CommonWa
6380: 74 63 68 2c 09 09 2f 2a 20 49 6e 69 74 69 61 6c tch,../* Initial
6390: 69 7a 65 20 6e 6f 74 69 66 69 65 72 2e 20 2a 2f ize notifier. */
63a0: 0a 20 20 20 20 20 43 6f 6d 6d 6f 6e 47 65 74 48 . CommonGetH
63b0: 61 6e 64 6c 65 09 09 2f 2a 20 47 65 74 20 4f 53 andle../* Get OS
63c0: 20 68 61 6e 64 6c 65 73 20 6f 75 74 20 6f 66 20 handles out of
63d0: 63 68 61 6e 6e 65 6c 2e 20 2a 2f 0a 2b 20 20 20 channel. */.+
63e0: 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 63 6c 6f 73 NULL,.../* clos
63f0: 65 32 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 e2proc. */.+
6400: 53 74 64 49 4f 42 6c 6f 63 6b 4d 6f 64 65 2c 09 StdIOBlockMode,.
6410: 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b 69 6e 67 ./* Set blocking
6420: 2f 6e 6f 6e 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 /nonblocking mod
6430: 65 2e 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 e.*/.+ NULL,.
6440: 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e ../* flush proc.
6450: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 */.+ NULL,..
6460: 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 ./* handler proc
6470: 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 . */.+ NULL,.
6480: 09 09 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70 ../* wide seek p
6490: 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c roc. */.+ NUL
64a0: 4c 2c 09 09 20 20 20 20 20 20 20 20 2f 2a 20 74 L,.. /* t
64b0: 68 72 65 61 64 20 61 63 74 69 6f 6e 73 20 2a 2f hread actions */
64c0: 0a 20 7d 3b 0a 20 0a 20 2f 2a 0a 40 40 20 2d 31 . };. . /*.@@ -1
64d0: 34 30 2c 38 20 2b 31 34 38 2c 37 20 40 40 0a 20 40,8 +148,7 @@.
64e0: 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 43 68 61 . static Tcl_Cha
64f0: 6e 6e 65 6c 54 79 70 65 20 66 69 6c 65 43 68 61 nnelType fileCha
6500: 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a 20 20 20 nnelType = {.
6510: 20 20 22 66 69 6c 65 22 2c 09 09 09 2f 2a 20 54 "file",.../* T
6520: 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 ype name. */.-
6530: 20 20 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 (Tcl_ChannelTy
6540: 70 65 56 65 72 73 69 6f 6e 29 46 69 6c 65 42 6c peVersion)FileBl
6550: 6f 63 6b 4d 6f 64 65 2c 09 09 2f 2a 20 53 65 74 ockMode,../* Set
6560: 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 0a 2d 20 20 blocking or.-
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a *
6590: 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f non-blocking mo
65a0: 64 65 2e 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 de.*/.+ TCL_C
65b0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 HANNEL_VERSION_4
65c0: 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 ,./* v4 channel
65d0: 2a 2f 0a 20 20 20 20 20 46 69 6c 65 43 6c 6f 73 */. FileClos
65e0: 65 2c 09 09 09 2f 2a 20 43 6c 6f 73 65 20 70 72 e,.../* Close pr
65f0: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 oc. */. File
6600: 49 6e 70 75 74 2c 09 09 09 2f 2a 20 49 6e 70 75 Input,.../* Inpu
6610: 74 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 t proc. */.
6620: 46 69 6c 65 4f 75 74 70 75 74 2c 09 09 09 2f 2a FileOutput,.../*
6630: 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f Output proc. */
6640: 0a 40 40 20 2d 31 35 30 2c 36 20 2b 31 35 37 2c .@@ -150,6 +157,
6650: 31 32 20 40 40 0a 20 20 20 20 20 4e 55 4c 4c 2c 12 @@. NULL,
6660: 09 09 09 2f 2a 20 47 65 74 20 6f 70 74 69 6f 6e .../* Get option
6670: 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 43 proc. */. C
6680: 6f 6d 6d 6f 6e 57 61 74 63 68 2c 09 09 2f 2a 20 ommonWatch,../*
6690: 49 6e 69 74 69 61 6c 69 7a 65 20 6e 6f 74 69 66 Initialize notif
66a0: 69 65 72 2e 20 2a 2f 0a 20 20 20 20 20 43 6f 6d ier. */. Com
66b0: 6d 6f 6e 47 65 74 48 61 6e 64 6c 65 09 09 2f 2a monGetHandle../*
66c0: 20 47 65 74 20 4f 53 20 68 61 6e 64 6c 65 73 20 Get OS handles
66d0: 6f 75 74 20 6f 66 20 63 68 61 6e 6e 65 6c 2e 20 out of channel.
66e0: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09 */.+ NULL,...
66f0: 2f 2a 20 63 6c 6f 73 65 32 70 72 6f 63 2e 20 2a /* close2proc. *
6700: 2f 0a 2b 20 20 20 20 46 69 6c 65 42 6c 6f 63 6b /.+ FileBlock
6710: 4d 6f 64 65 2c 09 09 2f 2a 20 53 65 74 20 62 6c Mode,../* Set bl
6720: 6f 63 6b 69 6e 67 2f 6e 6f 6e 62 6c 6f 63 6b 69 ocking/nonblocki
6730: 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 2b 20 20 20 20 ng mode.*/.+
6740: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 68 NULL,.../* flush
6750: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e proc. */.+ N
6760: 55 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c 65 ULL,.../* handle
6770: 72 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 r proc. */.+
6780: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 77 69 64 65 20 NULL,.../* wide
6790: 73 65 65 6b 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 seek proc. */.+
67a0: 20 20 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 FileThreadAct
67b0: 69 6f 6e 50 72 6f 63 2c 20 20 20 20 20 20 20 2f ionProc, /
67c0: 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f 6e 73 * thread actions
67d0: 20 2a 2f 0a 20 7d 3b 0a 20 0a 20 0a 40 40 20 2d */. };. . .@@ -
67e0: 31 32 31 32 2c 31 30 20 2b 31 32 32 35 2c 39 20 1212,10 +1225,9
67f0: 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d @@. /*. *------
6800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6840: 0a 20 20 2a 0a 2d 20 2a 20 54 63 6c 70 43 75 74 . *.- * TclpCut
6850: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2b FileChannel --.+
6860: 20 2a 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 * FileThreadAct
6870: 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 20 2a 0a 2d ionProc --. *.-
6880: 20 2a 09 52 65 6d 6f 76 65 20 61 6e 79 20 74 68 *.Remove any th
6890: 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 read local refs
68a0: 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e to this channel.
68b0: 20 53 65 65 0a 2d 20 2a 09 54 63 6c 5f 43 75 74 See.- *.Tcl_Cut
68c0: 43 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 Channel for more
68d0: 20 69 6e 66 6f 2e 0a 2b 20 2a 09 49 6e 73 65 72 info..+ *.Inser
68e0: 74 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20 t or remove any
68f0: 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 thread local ref
6900: 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 s to this channe
6910: 6c 2e 0a 20 20 2a 0a 20 20 2a 20 52 65 73 75 6c l.. *. * Resul
6920: 74 73 3a 0a 20 20 2a 09 4e 6f 6e 65 2e 0a 40 40 ts:. *.None..@@
6930: 20 2d 31 32 32 36 2c 32 33 20 2b 31 32 33 38 2c -1226,23 +1238,
6940: 32 31 20 40 40 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 21 @@. *-------
6950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
6990: 20 20 2a 2f 0a 20 0a 2d 76 6f 69 64 0a 2d 54 63 */. .-void.-Tc
69a0: 6c 70 43 75 74 46 69 6c 65 43 68 61 6e 6e 65 6c lpCutFileChannel
69b0: 28 63 68 61 6e 29 0a 2d 20 20 20 20 54 63 6c 5f (chan).- Tcl_
69c0: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 09 09 09 Channel chan;...
69d0: 2f 2a 20 54 68 65 20 63 68 61 6e 6e 65 6c 20 62 /* The channel b
69e0: 65 69 6e 67 20 72 65 6d 6f 76 65 64 2e 20 4d 75 eing removed. Mu
69f0: 73 74 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 st.-
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 6e * n
6a20: 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 ot be referenced
6a30: 20 69 6e 20 61 6e 79 0a 2d 20 20 20 20 20 20 20 in any.-
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a60: 20 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e * interpreter.
6a70: 20 2a 2f 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 */.+static void
6a80: 0a 2b 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 .+FileThreadActi
6a90: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65 onProc (instance
6aa0: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20 Data, action).+
6ab0: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 ClientData i
6ac0: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 nstanceData;.+
6ad0: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 20 int action;.
6ae0: 7b 0a 20 20 20 20 20 54 68 72 65 61 64 53 70 65 {. ThreadSpe
6af0: 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 cificData *tsdPt
6b00: 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 r = TCL_TSD_INIT
6b10: 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20 (&dataKey);.-
6b20: 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 Channel *chanPt
6b30: 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20 r = (Channel *)
6b40: 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 53 chan;.- FileS
6b50: 74 61 74 65 20 2a 69 6e 66 6f 50 74 72 3b 0a 2b tate *infoPtr;.+
6b60: 20 20 20 20 46 69 6c 65 53 74 61 74 65 20 2a 69 FileState *i
6b70: 6e 66 6f 50 74 72 20 3d 20 28 46 69 6c 65 53 74 nfoPtr = (FileSt
6b80: 61 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 ate *) instanceD
6b90: 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 ata;.+.+ if (
6ba0: 61 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 action == TCL_CH
6bb0: 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 ANNEL_THREAD_INS
6bc0: 45 52 54 29 20 7b 0a 2b 09 69 6e 66 6f 50 74 72 ERT) {.+.infoPtr
6bd0: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50 ->nextPtr = tsdP
6be0: 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72 tr->firstFilePtr
6bf0: 3b 0a 2b 09 74 73 64 50 74 72 2d 3e 66 69 72 73 ;.+.tsdPtr->firs
6c00: 74 46 69 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50 tFilePtr = infoP
6c10: 74 72 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 tr;.+ } else
6c20: 7b 0a 20 20 20 20 20 46 69 6c 65 53 74 61 74 65 {. FileState
6c30: 20 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 20 **nextPtrPtr;.
6c40: 20 20 20 20 69 6e 74 20 72 65 6d 6f 76 65 64 20 int removed
6c50: 3d 20 30 3b 0a 20 0a 2d 20 20 20 20 69 66 20 28 = 0;. .- if (
6c60: 63 68 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 72 chanPtr->typePtr
6c70: 20 21 3d 20 26 66 69 6c 65 43 68 61 6e 6e 65 6c != &fileChannel
6c80: 54 79 70 65 29 0a 2d 20 20 20 20 20 20 20 20 72 Type).- r
6c90: 65 74 75 72 6e 3b 0a 2d 0a 2d 20 20 20 20 69 6e eturn;.-.- in
6ca0: 66 6f 50 74 72 20 3d 20 28 46 69 6c 65 53 74 61 foPtr = (FileSta
6cb0: 74 65 20 2a 29 20 63 68 61 6e 50 74 72 2d 3e 69 te *) chanPtr->i
6cc0: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2d 0a 20 nstanceData;.-.
6cd0: 20 20 20 20 66 6f 72 20 28 6e 65 78 74 50 74 72 for (nextPtr
6ce0: 50 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d 3e Ptr = &(tsdPtr->
6cf0: 66 69 72 73 74 46 69 6c 65 50 74 72 29 3b 20 28 firstFilePtr); (
6d00: 2a 6e 65 78 74 50 74 72 50 74 72 29 20 21 3d 20 *nextPtrPtr) !=
6d10: 4e 55 4c 4c 3b 0a 20 09 20 6e 65 78 74 50 74 72 NULL;. . nextPtr
6d20: 50 74 72 20 3d 20 26 28 28 2a 6e 65 78 74 50 74 Ptr = &((*nextPt
6d30: 72 50 74 72 29 2d 3e 6e 65 78 74 50 74 72 29 29 rPtr)->nextPtr))
6d40: 20 7b 0a 20 09 69 66 20 28 28 2a 6e 65 78 74 50 {. .if ((*nextP
6d50: 74 72 50 74 72 29 20 3d 3d 20 69 6e 66 6f 50 74 trPtr) == infoPt
6d60: 72 29 20 7b 0a 40 40 20 2d 31 32 35 38 2c 34 33 r) {.@@ -1258,43
6d70: 20 2b 31 32 36 38 2c 38 20 40 40 0a 20 20 20 20 +1268,8 @@.
6d80: 20 20 2a 20 6c 6f 63 61 6c 20 64 61 74 61 20 69 * local data i
6d90: 6e 20 65 61 63 68 20 74 68 72 65 61 64 2e 0a 20 n each thread..
6da0: 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 69 */. .- i
6db0: 66 20 28 21 72 65 6d 6f 76 65 64 29 0a 2b 09 69 f (!removed).+.i
6dc0: 66 20 28 21 72 65 6d 6f 76 65 64 29 20 7b 0a 20 f (!removed) {.
6dd0: 20 20 20 20 20 20 20 20 70 61 6e 69 63 28 22 66 panic("f
6de0: 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e 6f 74 ile info ptr not
6df0: 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 6e 6e on thread chann
6e00: 65 6c 20 6c 69 73 74 22 29 3b 0a 2d 0a 20 7d 0a el list");.-. }.
6e10: 2d 0c 0a 2d 2f 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d -..-/*.- *------
6e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6e60: 0a 2d 20 2a 0a 2d 20 2a 20 54 63 6c 70 53 70 6c .- *.- * TclpSpl
6e70: 69 63 65 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d iceFileChannel -
6e80: 2d 0a 2d 20 2a 0a 2d 20 2a 09 49 6e 73 65 72 74 -.- *.- *.Insert
6e90: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 thread local re
6ea0: 66 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 6e f for this chann
6eb0: 65 6c 2e 0a 2d 20 2a 09 54 63 6c 5f 53 70 6c 69 el..- *.Tcl_Spli
6ec0: 63 65 43 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f ceChannel for mo
6ed0: 72 65 20 69 6e 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a re info..- *.- *
6ee0: 20 52 65 73 75 6c 74 73 3a 0a 2d 20 2a 09 4e 6f Results:.- *.No
6ef0: 6e 65 2e 0a 2d 20 2a 0a 2d 20 2a 20 53 69 64 65 ne..- *.- * Side
6f00: 20 65 66 66 65 63 74 73 3a 0a 2d 20 2a 09 43 68 effects:.- *.Ch
6f10: 61 6e 67 65 73 20 74 68 72 65 61 64 20 6c 6f 63 anges thread loc
6f20: 61 6c 20 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 al list of valid
6f30: 20 63 68 61 6e 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d channels..- *.-
6f40: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
6f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6f80: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a --------.- */.-.
6f90: 2d 76 6f 69 64 0a 2d 54 63 6c 70 53 70 6c 69 63 -void.-TclpSplic
6fa0: 65 46 69 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61 eFileChannel(cha
6fb0: 6e 29 0a 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e n).- Tcl_Chan
6fc0: 6e 65 6c 20 63 68 61 6e 3b 09 09 09 2f 2a 20 54 nel chan;.../* T
6fd0: 68 65 20 63 68 61 6e 6e 65 6c 20 62 65 69 6e 67 he channel being
6fe0: 20 72 65 6d 6f 76 65 64 2e 20 4d 75 73 74 0a 2d removed. Must.-
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7010: 20 20 20 20 20 20 20 20 20 2a 20 6e 6f 74 20 62 * not b
7020: 65 20 72 65 66 65 72 65 6e 63 65 64 20 69 6e 20 e referenced in
7030: 61 6e 79 0a 2d 20 20 20 20 20 20 20 20 20 20 20 any.-
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 *
7060: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a interpreter. */.
7070: 2d 7b 0a 2d 20 20 20 20 54 68 72 65 61 64 53 70 -{.- ThreadSp
7080: 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 ecificData *tsdP
7090: 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 tr = TCL_TSD_INI
70a0: 54 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 T(&dataKey);.-
70b0: 20 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 Channel *chanP
70c0: 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 tr = (Channel *)
70d0: 20 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 chan;.- File
70e0: 53 74 61 74 65 20 2a 69 6e 66 6f 50 74 72 3b 0a State *infoPtr;.
70f0: 2d 0a 2d 20 20 20 20 69 66 20 28 63 68 61 6e 50 -.- if (chanP
7100: 74 72 2d 3e 74 79 70 65 50 74 72 20 21 3d 20 26 tr->typePtr != &
7110: 66 69 6c 65 43 68 61 6e 6e 65 6c 54 79 70 65 29 fileChannelType)
7120: 0a 2d 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .- return
7130: 3b 0a 2d 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 ;.-.- infoPtr
7140: 20 3d 20 28 46 69 6c 65 53 74 61 74 65 20 2a 29 = (FileState *)
7150: 20 63 68 61 6e 50 74 72 2d 3e 69 6e 73 74 61 6e chanPtr->instan
7160: 63 65 44 61 74 61 3b 0a 2d 0a 2d 20 20 20 20 69 ceData;.-.- i
7170: 6e 66 6f 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 nfoPtr->nextPtr
7180: 3d 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46 = tsdPtr->firstF
7190: 69 6c 65 50 74 72 3b 0a 2d 20 20 20 20 74 73 64 ilePtr;.- tsd
71a0: 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 Ptr->firstFilePt
71b0: 72 20 3d 20 69 6e 66 6f 50 74 72 3b 0a 2b 20 20 r = infoPtr;.+
71c0: 20 20 7d 0a 20 7d 0a 49 6e 64 65 78 3a 20 74 65 }. }.Index: te
71d0: 73 74 73 2f 69 6f 2e 74 65 73 74 0a 3d 3d 3d 3d sts/io.test.====
71e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
71f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
7220: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f RCS file: /cvsro
7230: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 ot/tcl/tcl/tests
7240: 2f 69 6f 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 /io.test,v.retri
7250: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
7260: 2e 34 30 2e 32 2e 38 0a 64 69 66 66 20 2d 77 20 .40.2.8.diff -w
7270: 2d 75 20 2d 72 31 2e 34 30 2e 32 2e 38 20 69 6f -u -r1.40.2.8 io
7280: 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 73 2f .test.--- tests/
7290: 69 6f 2e 74 65 73 74 09 31 31 20 4e 6f 76 20 32 io.test.11 Nov 2
72a0: 30 30 34 20 30 31 3a 31 36 3a 32 30 20 2d 30 30 004 01:16:20 -00
72b0: 30 30 09 31 2e 34 30 2e 32 2e 38 0a 2b 2b 2b 20 00.1.40.2.8.+++
72c0: 74 65 73 74 73 2f 69 6f 2e 74 65 73 74 09 32 37 tests/io.test.27
72d0: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a Jan 2005 22:49:
72e0: 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 31 37 31 19 -0000.@@ -171
72f0: 32 2c 36 20 2b 31 37 31 32 2c 31 32 20 40 40 0a 2,6 +1712,12 @@.
7300: 20 20 20 20 20 73 65 74 20 66 20 5b 6f 70 65 6e set f [open
7310: 20 22 7c 5b 6c 69 73 74 20 5b 69 6e 74 65 72 70 "|[list [interp
7320: 72 65 74 65 72 5d 20 24 70 61 74 68 28 73 63 72 reter] $path(scr
7330: 69 70 74 29 20 5b 61 72 72 61 79 20 67 65 74 20 ipt) [array get
7340: 70 61 74 68 5d 5d 22 20 72 5d 0a 20 20 20 20 20 path]]" r].
7350: 73 65 74 20 63 20 5b 67 65 74 73 20 24 66 5d 0a set c [gets $f].
7360: 20 20 20 20 20 63 6c 6f 73 65 20 24 66 0a 2b 20 close $f.+
7370: 20 20 20 23 20 41 64 64 65 64 20 64 65 6c 61 79 # Added delay
7380: 20 74 6f 20 67 69 76 65 20 57 69 6e 64 6f 77 73 to give Windows
7390: 20 74 69 6d 65 20 74 6f 20 73 74 6f 70 20 74 68 time to stop th
73a0: 65 20 73 70 61 77 6e 65 64 20 70 72 6f 63 65 73 e spawned proces
73b0: 73 20 61 6e 64 20 63 6c 65 61 6e 0a 2b 20 20 20 s and clean.+
73c0: 20 23 20 75 70 20 69 74 73 20 67 72 69 70 20 6f # up its grip o
73d0: 6e 20 74 68 65 20 66 69 6c 65 20 74 65 73 74 31 n the file test1
73e0: 2e 20 41 64 64 65 64 20 64 65 6c 65 74 65 20 61 . Added delete a
73f0: 73 20 70 72 6f 70 65 72 20 74 65 73 74 20 63 6c s proper test cl
7400: 65 61 6e 75 70 2e 0a 2b 20 20 20 20 23 20 54 68 eanup..+ # Th
7410: 65 20 66 61 69 6c 69 6e 67 20 74 65 73 74 73 20 e failing tests
7420: 77 65 72 65 20 31 38 2e 31 20 61 6e 64 20 31 38 were 18.1 and 18
7430: 2e 32 20 61 73 20 66 69 72 73 74 20 72 65 2d 75 .2 as first re-u
7440: 73 65 72 73 20 6f 66 20 66 69 6c 65 20 22 74 65 sers of file "te
7450: 73 74 31 22 2e 0a 2b 20 20 20 20 61 66 74 65 72 st1"..+ after
7460: 20 31 30 30 30 30 0a 2b 20 20 20 20 66 69 6c 65 10000.+ file
7470: 20 64 65 6c 65 74 65 20 24 70 61 74 68 28 73 63 delete $path(sc
7480: 72 69 70 74 29 0a 2b 20 20 20 20 66 69 6c 65 20 ript).+ file
7490: 64 65 6c 65 74 65 20 24 70 61 74 68 28 74 65 73 delete $path(tes
74a0: 74 31 29 0a 20 20 20 20 20 73 65 74 20 63 0a 20 t1). set c.
74b0: 7d 20 68 65 6c 6c 6f 0a 20 0a 49 6e 64 65 78 3a } hello. .Index:
74c0: 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 68 61 unix/tclUnixCha
74d0: 6e 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d n.c.============
74e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
74f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
7510: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 =======.RCS file
7520: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 : /cvsroot/tcl/t
7530: 63 6c 2f 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 cl/unix/tclUnixC
7540: 68 61 6e 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 han.c,v.retrievi
7550: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 34 32 ng revision 1.42
7560: 2e 32 2e 34 0a 64 69 66 66 20 2d 77 20 2d 75 20 .2.4.diff -w -u
7570: 2d 72 31 2e 34 32 2e 32 2e 34 20 74 63 6c 55 6e -r1.42.2.4 tclUn
7580: 69 78 43 68 61 6e 2e 63 0a 2d 2d 2d 20 75 6e 69 ixChan.c.--- uni
7590: 78 2f 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 09 x/tclUnixChan.c.
75a0: 31 37 20 4e 6f 76 20 32 30 30 34 20 30 32 3a 35 17 Nov 2004 02:5
75b0: 32 3a 32 35 20 2d 30 30 30 30 09 31 2e 34 32 2e 2:25 -0000.1.42.
75c0: 32 2e 34 0a 2b 2b 2b 20 75 6e 69 78 2f 74 63 6c 2.4.+++ unix/tcl
75d0: 55 6e 69 78 43 68 61 6e 2e 63 09 32 37 20 4a 61 UnixChan.c.27 Ja
75e0: 6e 20 32 30 30 35 20 32 32 3a 34 39 3a 31 39 20 n 2005 22:49:19
75f0: 2d 30 30 30 30 0a 40 40 20 2d 32 35 30 2c 36 20 -0000.@@ -250,6
7600: 2b 32 35 30 2c 31 30 20 40 40 0a 20 09 09 09 20 +250,10 @@. ...
7610: 20 20 20 69 6e 74 20 74 6f 57 72 69 74 65 2c 20 int toWrite,
7620: 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29 29 int *errorCode))
7630: 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 46 ;. static int..F
7640: 69 6c 65 53 65 65 6b 50 72 6f 63 20 5f 41 4e 53 ileSeekProc _ANS
7650: 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 I_ARGS_((ClientD
7660: 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 ata instanceData
7670: 2c 0a 20 09 09 09 20 20 20 20 6c 6f 6e 67 20 6f ,. ... long o
7680: 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 65 2c ffset, int mode,
7690: 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29 int *errorCode)
76a0: 29 3b 0a 2b 23 69 66 64 65 66 20 44 45 50 52 45 );.+#ifdef DEPRE
76b0: 43 41 54 45 44 0a 2b 73 74 61 74 69 63 20 76 6f CATED.+static vo
76c0: 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 46 id F
76d0: 69 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 ileThreadActionP
76e0: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20 roc _ANSI_ARGS_
76f0: 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e 74 ((.+... Client
7700: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 Data instanceDat
7710: 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b a, int action));
7720: 0a 2b 23 65 6e 64 69 66 0a 20 73 74 61 74 69 63 .+#endif. static
7730: 20 54 63 6c 5f 57 69 64 65 49 6e 74 09 46 69 6c Tcl_WideInt.Fil
7740: 65 57 69 64 65 53 65 65 6b 50 72 6f 63 20 5f 41 eWideSeekProc _A
7750: 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e NSI_ARGS_((Clien
7760: 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 tData instanceDa
7770: 74 61 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f ta,. ... Tcl_
7780: 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 20 WideInt offset,
7790: 69 6e 74 20 6d 6f 64 65 2c 20 69 6e 74 20 2a 65 int mode, int *e
77a0: 72 72 6f 72 43 6f 64 65 29 29 3b 0a 20 73 74 61 rrorCode));. sta
77b0: 74 69 63 20 76 6f 69 64 09 09 46 69 6c 65 57 61 tic void..FileWa
77c0: 74 63 68 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 tchProc _ANSI_AR
77d0: 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 20 GS_((ClientData
77e0: 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a 40 40 instanceData,.@@
77f0: 20 2d 33 30 35 2c 37 20 2b 33 30 39 2c 37 20 40 -305,7 +309,7 @
7800: 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f @. . static Tcl_
7810: 43 68 61 6e 6e 65 6c 54 79 70 65 20 66 69 6c 65 ChannelType file
7820: 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a ChannelType = {.
7830: 20 20 20 20 20 22 66 69 6c 65 22 2c 09 09 09 2f "file",.../
7840: 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a * Type name. */.
7850: 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c - TCL_CHANNEL
7860: 5f 56 45 52 53 49 4f 4e 5f 33 2c 09 2f 2a 20 76 _VERSION_3,./* v
7870: 33 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 3 channel */.+
7880: 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 TCL_CHANNEL_VE
7890: 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 RSION_4,./* v4 c
78a0: 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 46 hannel */. F
78b0: 69 6c 65 43 6c 6f 73 65 50 72 6f 63 2c 09 09 2f ileCloseProc,../
78c0: 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f * Close proc. */
78d0: 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 74 50 . FileInputP
78e0: 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70 roc,../* Input p
78f0: 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c roc. */. Fil
7900: 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 2f 2a eOutputProc,../*
7910: 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f Output proc. */
7920: 0a 40 40 20 2d 33 31 39 2c 36 20 2b 33 32 33 2c .@@ -319,6 +323,
7930: 31 31 20 40 40 0a 20 20 20 20 20 4e 55 4c 4c 2c 11 @@. NULL,
7940: 09 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 .../* flush proc
7950: 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 . */. NULL,.
7960: 09 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f ../* handler pro
7970: 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 57 c. */. FileW
7980: 69 64 65 53 65 65 6b 50 72 6f 63 2c 09 09 2f 2a ideSeekProc,../*
7990: 20 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 2e wide seek proc.
79a0: 20 2a 2f 0a 2b 23 69 66 64 65 66 20 44 45 50 52 */.+#ifdef DEPR
79b0: 45 43 41 54 45 44 0a 2b 20 20 20 20 46 69 6c 65 ECATED.+ File
79c0: 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 ThreadActionProc
79d0: 2c 20 20 20 20 20 20 20 2f 2a 20 74 68 72 65 61 , /* threa
79e0: 64 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 2b 23 65 d actions */.+#e
79f0: 6c 73 65 0a 2b 20 20 20 20 4e 55 4c 4c 2c 0a 2b lse.+ NULL,.+
7a00: 23 65 6e 64 69 66 0a 20 7d 3b 0a 20 0a 20 23 69 #endif. };. . #i
7a10: 66 64 65 66 20 53 55 50 50 4f 52 54 53 5f 54 54 fdef SUPPORTS_TT
7a20: 59 0a 40 40 20 2d 33 32 39 2c 37 20 2b 33 33 38 Y.@@ -329,7 +338
7a30: 2c 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20 ,7 @@. . static
7a40: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 Tcl_ChannelType
7a50: 74 74 79 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d ttyChannelType =
7a60: 20 7b 0a 20 20 20 20 20 22 74 74 79 22 2c 09 09 {. "tty",..
7a70: 09 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a ./* Type name. *
7a80: 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e /.- TCL_CHANN
7a90: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a EL_VERSION_2,./*
7aa0: 20 76 32 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b v2 channel */.+
7ab0: 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f TCL_CHANNEL_
7ac0: 56 45 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 VERSION_4,./* v4
7ad0: 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 channel */.
7ae0: 20 54 74 79 43 6c 6f 73 65 50 72 6f 63 2c 09 09 TtyCloseProc,..
7af0: 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a /* Close proc. *
7b00: 2f 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 74 /. FileInput
7b10: 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 Proc,../* Input
7b20: 70 72 6f 63 2e 20 2a 2f 0a 20 23 69 66 20 42 41 proc. */. #if BA
7b30: 44 5f 54 49 50 33 35 5f 46 4c 55 53 48 0a 40 40 D_TIP35_FLUSH.@@
7b40: 20 2d 33 34 36 2c 36 20 2b 33 35 35 2c 38 20 40 -346,6 +355,8 @
7b50: 40 0a 20 20 20 20 20 46 69 6c 65 42 6c 6f 63 6b @. FileBlock
7b60: 4d 6f 64 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65 ModeProc,../* Se
7b70: 74 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f t blocking or no
7b80: 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e n-blocking mode.
7b90: 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 */. NULL,...
7ba0: 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a /* flush proc. *
7bb0: 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f /. NULL,.../
7bc0: 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20 * handler proc.
7bd0: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09 */.+ NULL,...
7be0: 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70 72 6f /* wide seek pro
7bf0: 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c c. */.+ NULL,
7c00: 09 09 09 2f 2a 20 74 68 72 65 61 64 20 61 63 74 .../* thread act
7c10: 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d 3b ion proc. */. };
7c20: 0a 20 23 65 6e 64 69 66 09 2f 2a 20 53 55 50 50 . #endif./* SUPP
7c30: 4f 52 54 53 5f 54 54 59 20 2a 2f 0a 20 0a 40 40 ORTS_TTY */. .@@
7c40: 20 2d 33 35 36 2c 37 20 2b 33 36 37 2c 37 20 40 -356,7 +367,7 @
7c50: 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f @. . static Tcl_
7c60: 43 68 61 6e 6e 65 6c 54 79 70 65 20 74 63 70 43 ChannelType tcpC
7c70: 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a 20 hannelType = {.
7c80: 20 20 20 20 22 74 63 70 22 2c 09 09 09 2f 2a 20 "tcp",.../*
7c90: 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 Type name. */.-
7ca0: 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 TCL_CHANNEL_V
7cb0: 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 76 32 20 ERSION_2,./* v2
7cc0: 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 20 20 channel */.+
7cd0: 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 TCL_CHANNEL_VERS
7ce0: 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 68 61 ION_4,./* v4 cha
7cf0: 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 54 63 70 nnel */. Tcp
7d00: 43 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43 CloseProc,../* C
7d10: 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 lose proc. */.
7d20: 20 20 20 54 63 70 49 6e 70 75 74 50 72 6f 63 2c TcpInputProc,
7d30: 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e ../* Input proc.
7d40: 20 2a 2f 0a 20 20 20 20 20 54 63 70 4f 75 74 70 */. TcpOutp
7d50: 75 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 utProc,../* Outp
7d60: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d ut proc. */.@@ -
7d70: 33 36 39 2c 36 20 2b 33 38 30 2c 38 20 40 40 0a 369,6 +380,8 @@.
7d80: 20 20 20 20 20 54 63 70 42 6c 6f 63 6b 4d 6f 64 TcpBlockMod
7d90: 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65 74 20 62 eProc,../* Set b
7da0: 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 locking or non-b
7db0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a locking mode.*/.
7dc0: 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 NULL,.../*
7dd0: 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 flush proc. */.
7de0: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 NULL,.../* h
7df0: 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f 0a andler proc. */.
7e00: 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 + NULL,.../*
7e10: 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 2e 20 wide seek proc.
7e20: 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09 */.+ NULL,...
7e30: 2f 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f 6e /* thread action
7e40: 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d 3b 0a 20 0a proc. */. };. .
7e50: 20 0c 0a 40 40 20 2d 31 38 34 30 2c 38 20 2b 31 ..@@ -1840,8 +1
7e60: 38 35 33 2c 31 31 20 40 40 0a 20 0a 20 23 69 66 853,11 @@. . #if
7e70: 64 65 66 20 44 45 50 52 45 43 41 54 45 44 0a 20 def DEPRECATED.
7e80: 20 20 20 20 69 66 20 28 63 68 61 6e 6e 65 6c 54 if (channelT
7e90: 79 70 65 50 74 72 20 3d 3d 20 26 66 69 6c 65 43 ypePtr == &fileC
7ea0: 68 61 6e 6e 65 6c 54 79 70 65 29 20 7b 0a 2d 20 hannelType) {.-
7eb0: 20 20 20 20 20 20 20 66 73 50 74 72 2d 3e 6e 65 fsPtr->ne
7ec0: 78 74 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e xtPtr = tsdPtr->
7ed0: 66 69 72 73 74 46 69 6c 65 50 74 72 3b 0a 2d 20 firstFilePtr;.-
7ee0: 20 20 20 20 20 20 20 74 73 64 50 74 72 2d 3e 66 tsdPtr->f
7ef0: 69 72 73 74 46 69 6c 65 50 74 72 20 3d 20 66 73 irstFilePtr = fs
7f00: 50 74 72 3b 0a 2b 20 20 20 20 20 20 20 20 2f 2a Ptr;.+ /*
7f10: 20 54 49 50 20 23 32 31 38 2e 20 52 65 6d 6f 76 TIP #218. Remov
7f20: 65 64 20 74 68 65 20 63 6f 64 65 20 69 6e 73 65 ed the code inse
7f30: 72 74 69 6e 67 20 74 68 65 20 6e 65 77 20 73 74 rting the new st
7f40: 72 75 63 74 75 72 65 0a 2b 09 20 2a 20 69 6e 74 ructure.+. * int
7f50: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69 73 o the global lis
7f60: 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 68 t. This is now h
7f70: 61 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 74 68 andled in the th
7f80: 72 65 61 64 0a 2b 09 20 2a 20 61 63 74 69 6f 6e read.+. * action
7f90: 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e 64 20 callbacks, and
7fa0: 6f 6e 6c 79 20 74 68 65 72 65 2e 0a 2b 09 20 2a only there..+. *
7fb0: 2f 0a 2b 20 20 20 20 20 20 20 20 66 73 50 74 72 /.+ fsPtr
7fc0: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c ->nextPtr = NULL
7fd0: 3b 0a 20 20 20 20 20 7d 0a 20 23 65 6e 64 69 66 ;. }. #endif
7fe0: 20 2f 2a 20 44 45 50 52 45 43 41 54 45 44 20 2a /* DEPRECATED *
7ff0: 2f 0a 20 20 20 20 20 66 73 50 74 72 2d 3e 76 61 /. fsPtr->va
8000: 6c 69 64 4d 61 73 6b 20 3d 20 63 68 61 6e 6e 65 lidMask = channe
8010: 6c 50 65 72 6d 69 73 73 69 6f 6e 73 20 7c 20 54 lPermissions | T
8020: 43 4c 5f 45 58 43 45 50 54 49 4f 4e 3b 0a 40 40 CL_EXCEPTION;.@@
8030: 20 2d 33 32 38 31 2c 31 33 20 2b 33 32 39 37 2c -3281,13 +3297,
8040: 31 33 20 40 40 0a 20 20 20 20 20 72 65 74 75 72 13 @@. retur
8050: 6e 20 72 65 73 75 6c 74 3b 0a 20 7d 0a 20 0c 0a n result;. }. ..
8060: 2b 23 69 66 64 65 66 20 44 45 50 52 45 43 41 54 +#ifdef DEPRECAT
8070: 45 44 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d ED. /*. *------
8080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
80a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
80b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
80c0: 0a 20 20 2a 0a 2d 20 2a 20 54 63 6c 70 43 75 74 . *.- * TclpCut
80d0: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2b FileChannel --.+
80e0: 20 2a 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 * FileThreadAct
80f0: 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 20 2a 0a 2d ionProc --. *.-
8100: 20 2a 09 52 65 6d 6f 76 65 20 61 6e 79 20 74 68 *.Remove any th
8110: 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 read local refs
8120: 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e to this channel.
8130: 20 53 65 65 0a 2d 20 2a 09 54 63 6c 5f 43 75 74 See.- *.Tcl_Cut
8140: 43 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 Channel for more
8150: 20 69 6e 66 6f 2e 0a 2b 20 2a 09 49 6e 73 65 72 info..+ *.Inser
8160: 74 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20 t or remove any
8170: 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 thread local ref
8180: 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 s to this channe
8190: 6c 2e 0a 20 20 2a 0a 20 20 2a 20 52 65 73 75 6c l.. *. * Resul
81a0: 74 73 3a 0a 20 20 2a 09 4e 6f 6e 65 2e 0a 40 40 ts:. *.None..@@
81b0: 20 2d 33 32 39 38 2c 32 34 20 2b 33 33 31 34 2c -3298,24 +3314,
81c0: 32 31 20 40 40 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 21 @@. *-------
81d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
81e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
81f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
8210: 20 20 2a 2f 0a 20 0a 2d 76 6f 69 64 0a 2d 54 63 */. .-void.-Tc
8220: 6c 70 43 75 74 46 69 6c 65 43 68 61 6e 6e 65 6c lpCutFileChannel
8230: 28 63 68 61 6e 29 0a 2d 20 20 20 20 54 63 6c 5f (chan).- Tcl_
8240: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 09 09 09 Channel chan;...
8250: 2f 2a 20 54 68 65 20 63 68 61 6e 6e 65 6c 20 62 /* The channel b
8260: 65 69 6e 67 20 72 65 6d 6f 76 65 64 2e 20 4d 75 eing removed. Mu
8270: 73 74 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 st.-
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 6e * n
82a0: 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 ot be referenced
82b0: 20 69 6e 20 61 6e 79 0a 2d 20 20 20 20 20 20 20 in any.-
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
82e0: 20 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e * interpreter.
82f0: 20 2a 2f 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 */.+static void
8300: 0a 2b 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 .+FileThreadActi
8310: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65 onProc (instance
8320: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20 Data, action).+
8330: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 ClientData i
8340: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 nstanceData;.+
8350: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 20 int action;.
8360: 7b 0a 2d 23 69 66 64 65 66 20 44 45 50 52 45 43 {.-#ifdef DEPREC
8370: 41 54 45 44 0a 20 20 20 20 20 54 68 72 65 61 64 ATED. Thread
8380: 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 SpecificData *ts
8390: 64 50 74 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 dPtr = TCL_TSD_I
83a0: 4e 49 54 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d NIT(&dataKey);.-
83b0: 20 20 20 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 Channel *cha
83c0: 6e 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20 nPtr = (Channel
83d0: 2a 29 20 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69 *) chan;.- Fi
83e0: 6c 65 53 74 61 74 65 20 2a 66 73 50 74 72 3b 0a leState *fsPtr;.
83f0: 2b 20 20 20 20 46 69 6c 65 53 74 61 74 65 20 2a + FileState *
8400: 66 73 50 74 72 20 3d 20 28 46 69 6c 65 53 74 61 fsPtr = (FileSta
8410: 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 te *) instanceDa
8420: 74 61 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 61 ta;.+.+ if (a
8430: 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 ction == TCL_CHA
8440: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 NNEL_THREAD_INSE
8450: 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 66 RT) {.+ f
8460: 73 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 20 20 sPtr->nextPtr
8470: 20 20 20 20 3d 20 74 73 64 50 74 72 2d 3e 66 69 = tsdPtr->fi
8480: 72 73 74 46 69 6c 65 50 74 72 3b 0a 2b 09 74 73 rstFilePtr;.+.ts
8490: 64 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 dPtr->firstFileP
84a0: 74 72 20 3d 20 66 73 50 74 72 3b 0a 2b 20 20 20 tr = fsPtr;.+
84b0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 46 } else {. F
84c0: 69 6c 65 53 74 61 74 65 20 2a 2a 6e 65 78 74 50 ileState **nextP
84d0: 74 72 50 74 72 3b 0a 20 20 20 20 20 69 6e 74 20 trPtr;. int
84e0: 72 65 6d 6f 76 65 64 20 3d 20 30 3b 0a 20 0a 2d removed = 0;. .-
84f0: 20 20 20 20 69 66 20 28 63 68 61 6e 50 74 72 2d if (chanPtr-
8500: 3e 74 79 70 65 50 74 72 20 21 3d 20 26 66 69 6c >typePtr != &fil
8510: 65 43 68 61 6e 6e 65 6c 54 79 70 65 29 0a 2d 20 eChannelType).-
8520: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d return;.-
8530: 0a 2d 20 20 20 20 66 73 50 74 72 20 3d 20 28 46 .- fsPtr = (F
8540: 69 6c 65 53 74 61 74 65 20 2a 29 20 63 68 61 6e ileState *) chan
8550: 50 74 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74 Ptr->instanceDat
8560: 61 3b 0a 2d 0a 20 20 20 20 20 66 6f 72 20 28 6e a;.-. for (n
8570: 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 74 73 extPtrPtr = &(ts
8580: 64 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 dPtr->firstFileP
8590: 74 72 29 3b 20 28 2a 6e 65 78 74 50 74 72 50 74 tr); (*nextPtrPt
85a0: 72 29 20 21 3d 20 4e 55 4c 4c 3b 0a 20 09 20 6e r) != NULL;. . n
85b0: 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 28 2a extPtrPtr = &((*
85c0: 6e 65 78 74 50 74 72 50 74 72 29 2d 3e 6e 65 78 nextPtrPtr)->nex
85d0: 74 50 74 72 29 29 20 7b 0a 20 09 69 66 20 28 28 tPtr)) {. .if ((
85e0: 2a 6e 65 78 74 50 74 72 50 74 72 29 20 3d 3d 20 *nextPtrPtr) ==
85f0: 66 73 50 74 72 29 20 7b 0a 40 40 20 2d 33 33 32 fsPtr) {.@@ -332
8600: 36 2c 35 31 20 2b 33 33 33 39 2c 31 35 20 40 40 6,51 +3339,15 @@
8610: 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 2f . }. . /
8620: 2a 0a 2d 20 20 20 20 20 2a 20 54 68 69 73 20 63 *.- * This c
8630: 6f 75 6c 64 20 68 61 70 70 65 6e 20 69 66 20 74 ould happen if t
8640: 68 65 20 63 68 61 6e 6e 65 6c 20 77 61 73 20 63 he channel was c
8650: 72 65 61 74 65 64 20 69 6e 20 6f 6e 65 20 74 68 reated in one th
8660: 72 65 61 64 0a 2d 20 20 20 20 20 2a 20 61 6e 64 read.- * and
8670: 20 74 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20 61 then moved to a
8680: 6e 6f 74 68 65 72 20 77 69 74 68 6f 75 74 20 75 nother without u
8690: 70 64 61 74 69 6e 67 20 74 68 65 20 74 68 72 65 pdating the thre
86a0: 61 64 0a 2d 20 20 20 20 20 2a 20 6c 6f 63 61 6c ad.- * local
86b0: 20 64 61 74 61 20 69 6e 20 65 61 63 68 20 74 68 data in each th
86c0: 72 65 61 64 2e 0a 2b 09 20 2a 20 54 68 69 73 20 read..+. * This
86d0: 63 6f 75 6c 64 20 68 61 70 70 65 6e 20 69 66 20 could happen if
86e0: 74 68 65 20 63 68 61 6e 6e 65 6c 20 77 61 73 20 the channel was
86f0: 63 72 65 61 74 65 64 20 69 6e 20 6f 6e 65 0a 2b created in one.+
8700: 09 20 2a 20 74 68 72 65 61 64 20 61 6e 64 20 74 . * thread and t
8710: 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20 61 6e 6f hen moved to ano
8720: 74 68 65 72 20 77 69 74 68 6f 75 74 20 75 70 64 ther without upd
8730: 61 74 69 6e 67 0a 2b 09 20 2a 20 74 68 65 20 74 ating.+. * the t
8740: 68 72 65 61 64 20 6c 6f 63 61 6c 20 64 61 74 61 hread local data
8750: 20 69 6e 20 65 61 63 68 20 74 68 72 65 61 64 2e in each thread.
8760: 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 . */. .-
8770: 20 69 66 20 28 21 72 65 6d 6f 76 65 64 29 0a 2b if (!removed).+
8780: 09 69 66 20 28 21 72 65 6d 6f 76 65 64 29 20 7b .if (!removed) {
8790: 0a 20 20 20 20 20 20 20 20 20 70 61 6e 69 63 28 . panic(
87a0: 22 66 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e "file info ptr n
87b0: 6f 74 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 ot on thread cha
87c0: 6e 6e 65 6c 20 6c 69 73 74 22 29 3b 0a 2d 0a 2d nnel list");.-.-
87d0: 23 65 6e 64 69 66 20 2f 2a 20 44 45 50 52 45 43 #endif /* DEPREC
87e0: 41 54 45 44 20 2a 2f 0a 20 7d 0a 2d 0c 0a 2d 2f ATED */. }.-..-/
87f0: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.- *-----------
8800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a -----------.- *.
8840: 2d 20 2a 20 54 63 6c 70 53 70 6c 69 63 65 46 69 - * TclpSpliceFi
8850: 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2d 20 2a leChannel --.- *
8860: 0a 2d 20 2a 09 49 6e 73 65 72 74 20 74 68 72 65 .- *.Insert thre
8870: 61 64 20 6c 6f 63 61 6c 20 72 65 66 20 66 6f 72 ad local ref for
8880: 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2d this channel..-
8890: 20 2a 09 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 *.Tcl_SpliceCha
88a0: 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e nnel for more in
88b0: 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75 fo..- *.- * Resu
88c0: 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d lts:.- *.None..-
88d0: 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 66 65 *.- * Side effe
88e0: 63 74 73 3a 0a 2d 20 2a 09 43 68 61 6e 67 65 73 cts:.- *.Changes
88f0: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 thread local li
8900: 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e st of valid chan
8910: 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d 20 2a 2d 2d 2d nels..- *.- *---
8920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8960: 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f 69 64 ---.- */.-.-void
8970: 0a 2d 54 63 6c 70 53 70 6c 69 63 65 46 69 6c 65 .-TclpSpliceFile
8980: 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 Channel(chan).-
8990: 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 Tcl_Channel c
89a0: 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 han;.../* The ch
89b0: 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f annel being remo
89c0: 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20 20 20 ved. Must.-
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
89e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
89f0: 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72 65 66 * not be ref
8a00: 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 2d erenced in any.-
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a30: 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 65 72 * inter
8a40: 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 7b 0a 2d 23 preter. */.-{.-#
8a50: 69 66 64 65 66 20 44 45 50 52 45 43 41 54 45 44 ifdef DEPRECATED
8a60: 0a 2d 20 20 20 20 54 68 72 65 61 64 53 70 65 63 .- ThreadSpec
8a70: 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 72 ificData *tsdPtr
8a80: 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 28 = TCL_TSD_INIT(
8a90: 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20 20 &dataKey);.-
8aa0: 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 72 Channel *chanPtr
8ab0: 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63 = (Channel *) c
8ac0: 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 53 74 han;.- FileSt
8ad0: 61 74 65 20 2a 66 73 50 74 72 3b 0a 2d 0a 2d 20 ate *fsPtr;.-.-
8ae0: 20 20 20 69 66 20 28 63 68 61 6e 50 74 72 2d 3e if (chanPtr->
8af0: 74 79 70 65 50 74 72 20 21 3d 20 26 66 69 6c 65 typePtr != &file
8b00: 43 68 61 6e 6e 65 6c 54 79 70 65 29 0a 2d 20 20 ChannelType).-
8b10: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d 0a return;.-.
8b20: 2d 20 20 20 20 66 73 50 74 72 20 3d 20 28 46 69 - fsPtr = (Fi
8b30: 6c 65 53 74 61 74 65 20 2a 29 20 63 68 61 6e 50 leState *) chanP
8b40: 74 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74 61 tr->instanceData
8b50: 3b 0a 2d 0a 2d 20 20 20 20 66 73 50 74 72 2d 3e ;.-.- fsPtr->
8b60: 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50 74 72 nextPtr = tsdPtr
8b70: 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72 3b 0a ->firstFilePtr;.
8b80: 2d 20 20 20 20 74 73 64 50 74 72 2d 3e 66 69 72 - tsdPtr->fir
8b90: 73 74 46 69 6c 65 50 74 72 20 3d 20 66 73 50 74 stFilePtr = fsPt
8ba0: 72 3b 0a 2d 23 65 6e 64 69 66 20 2f 2a 20 44 45 r;.-#endif /* DE
8bb0: 50 52 45 43 41 54 45 44 20 2a 2f 0a 20 7d 0a 2b PRECATED */. }.+
8bc0: 7d 0a 2b 23 65 6e 64 69 66 20 2f 2a 20 44 45 50 }.+#endif /* DEP
8bd0: 52 45 43 41 54 45 44 20 2a 2f 0a 2b 0a 49 6e 64 RECATED */.+.Ind
8be0: 65 78 3a 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78 ex: unix/tclUnix
8bf0: 50 69 70 65 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d Pipe.c.=========
8c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 ==========.RCS f
8c40: 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 ile: /cvsroot/tc
8c50: 6c 2f 74 63 6c 2f 75 6e 69 78 2f 74 63 6c 55 6e l/tcl/unix/tclUn
8c60: 69 78 50 69 70 65 2e 63 2c 76 0a 72 65 74 72 69 ixPipe.c,v.retri
8c70: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
8c80: 2e 32 33 2e 32 2e 32 0a 64 69 66 66 20 2d 77 20 .23.2.2.diff -w
8c90: 2d 75 20 2d 72 31 2e 32 33 2e 32 2e 32 20 74 63 -u -r1.23.2.2 tc
8ca0: 6c 55 6e 69 78 50 69 70 65 2e 63 0a 2d 2d 2d 20 lUnixPipe.c.---
8cb0: 75 6e 69 78 2f 74 63 6c 55 6e 69 78 50 69 70 65 unix/tclUnixPipe
8cc0: 2e 63 09 38 20 4a 75 6e 20 32 30 30 34 20 32 30 .c.8 Jun 2004 20
8cd0: 3a 34 33 3a 33 33 20 2d 30 30 30 30 09 31 2e 32 :43:33 -0000.1.2
8ce0: 33 2e 32 2e 32 0a 2b 2b 2b 20 75 6e 69 78 2f 74 3.2.2.+++ unix/t
8cf0: 63 6c 55 6e 69 78 50 69 70 65 2e 63 09 32 37 20 clUnixPipe.c.27
8d00: 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a 31 Jan 2005 22:49:1
8d10: 39 20 2d 30 30 30 30 0a 40 40 20 2d 37 32 2c 37 9 -0000.@@ -72,7
8d20: 20 2b 37 32 2c 37 20 40 40 0a 20 0a 20 73 74 61 +72,7 @@. . sta
8d30: 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 tic Tcl_ChannelT
8d40: 79 70 65 20 70 69 70 65 43 68 61 6e 6e 65 6c 54 ype pipeChannelT
8d50: 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22 70 69 ype = {. "pi
8d60: 70 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 20 6e pe",.../* Type n
8d70: 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 43 4c ame. */.- TCL
8d80: 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e _CHANNEL_VERSION
8d90: 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e 65 _2,./* v2 channe
8da0: 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 48 l */.+ TCL_CH
8db0: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c ANNEL_VERSION_4,
8dc0: 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 2a ./* v4 channel *
8dd0: 2f 0a 20 20 20 20 20 50 69 70 65 43 6c 6f 73 65 /. PipeClose
8de0: 50 72 6f 63 2c 09 09 2f 2a 20 43 6c 6f 73 65 20 Proc,../* Close
8df0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 50 69 proc. */. Pi
8e00: 70 65 49 6e 70 75 74 50 72 6f 63 2c 09 09 2f 2a peInputProc,../*
8e10: 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a Input proc. */.
8e20: 20 20 20 20 20 50 69 70 65 4f 75 74 70 75 74 50 PipeOutputP
8e30: 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 75 74 20 roc,../* Output
8e40: 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 38 35 2c proc. */.@@ -85,
8e50: 36 20 2b 38 35 2c 38 20 40 40 0a 20 20 20 20 20 6 +85,8 @@.
8e60: 50 69 70 65 42 6c 6f 63 6b 4d 6f 64 65 50 72 6f PipeBlockModePro
8e70: 63 2c 09 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b c,../* Set block
8e80: 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 6b ing or non-block
8e90: 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 20 ing mode.*/.
8ea0: 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 NULL,.../* flus
8eb0: 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 h proc. */.
8ec0: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c NULL,.../* handl
8ed0: 65 72 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 er proc. */.+
8ee0: 20 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 NULL,
8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
8f00: 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 20 2a wide seek proc *
8f10: 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 20 20 20 /.+ NULL,
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8f30: 20 20 20 2f 2a 20 74 68 72 65 61 64 20 61 63 74 /* thread act
8f40: 69 6f 6e 20 70 72 6f 63 20 2a 2f 0a 20 7d 3b 0a ion proc */. };.
8f50: 20 0c 0a 20 2f 2a 0a 49 6e 64 65 78 3a 20 77 69 .. /*.Index: wi
8f60: 6e 2f 74 63 6c 57 69 6e 43 68 61 6e 2e 63 0a 3d n/tclWinChan.c.=
8f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8fb0: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 ==.RCS file: /cv
8fc0: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 sroot/tcl/tcl/wi
8fd0: 6e 2f 74 63 6c 57 69 6e 43 68 61 6e 2e 63 2c 76 n/tclWinChan.c,v
8fe0: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 .retrieving revi
8ff0: 73 69 6f 6e 20 31 2e 33 30 2e 32 2e 32 0a 64 69 sion 1.30.2.2.di
9000: 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 33 30 2e ff -w -u -r1.30.
9010: 32 2e 32 20 74 63 6c 57 69 6e 43 68 61 6e 2e 63 2.2 tclWinChan.c
9020: 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 43 .--- win/tclWinC
9030: 68 61 6e 2e 63 09 31 39 20 4a 61 6e 20 32 30 30 han.c.19 Jan 200
9040: 35 20 32 32 3a 30 39 3a 35 38 20 2d 30 30 30 30 5 22:09:58 -0000
9050: 09 31 2e 33 30 2e 32 2e 32 0a 2b 2b 2b 20 77 69 .1.30.2.2.+++ wi
9060: 6e 2f 74 63 6c 57 69 6e 43 68 61 6e 2e 63 09 32 n/tclWinChan.c.2
9070: 37 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 7 Jan 2005 22:49
9080: 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 39 38 :19 -0000.@@ -98
9090: 2c 36 20 2b 39 38 2c 38 20 40 40 0a 20 09 09 09 ,6 +98,8 @@. ...
90a0: 20 20 20 20 69 6e 74 20 66 6c 61 67 73 29 29 3b int flags));
90b0: 0a 20 73 74 61 74 69 63 20 76 6f 69 64 09 09 46 . static void..F
90c0: 69 6c 65 57 61 74 63 68 50 72 6f 63 20 5f 41 4e ileWatchProc _AN
90d0: 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 SI_ARGS_((Client
90e0: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 Data instanceDat
90f0: 61 2c 0a 20 09 09 20 20 20 20 20 20 20 20 20 20 a,. ..
9100: 20 20 69 6e 74 20 6d 61 73 6b 29 29 3b 0a 2b 73 int mask));.+s
9110: 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20 20 tatic void
9120: 20 20 20 20 20 20 20 46 69 6c 65 54 68 72 65 61 FileThrea
9130: 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 4e 53 dActionProc _ANS
9140: 49 5f 41 52 47 53 5f 20 28 28 0a 2b 09 09 09 20 I_ARGS_ ((.+...
9150: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 ClientData ins
9160: 74 61 6e 63 65 44 61 74 61 2c 20 69 6e 74 20 61 tanceData, int a
9170: 63 74 69 6f 6e 29 29 3b 0a 20 0a 20 09 09 09 20 ction));. . ...
9180: 20 20 20 0a 20 2f 2a 0a 40 40 20 2d 31 30 36 2c . /*.@@ -106,
9190: 37 20 2b 31 30 38 2c 37 20 40 40 0a 20 0a 20 73 7 +108,7 @@. . s
91a0: 74 61 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 tatic Tcl_Channe
91b0: 6c 54 79 70 65 20 66 69 6c 65 43 68 61 6e 6e 65 lType fileChanne
91c0: 6c 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22 lType = {. "
91d0: 66 69 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 file",.../* Type
91e0: 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 name. */.- T
91f0: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 CL_CHANNEL_VERSI
9200: 4f 4e 5f 33 2c 09 2f 2a 20 76 33 20 63 68 61 6e ON_3,./* v3 chan
9210: 6e 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f nel */.+ TCL_
9220: 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f CHANNEL_VERSION_
9230: 34 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 4,./* v4 channel
9240: 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 43 6c 6f */. FileClo
9250: 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43 6c 6f 73 seProc,../* Clos
9260: 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 e proc. */.
9270: 46 69 6c 65 49 6e 70 75 74 50 72 6f 63 2c 09 09 FileInputProc,..
9280: 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a /* Input proc. *
9290: 2f 0a 20 20 20 20 20 46 69 6c 65 4f 75 74 70 75 /. FileOutpu
92a0: 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 75 tProc,../* Outpu
92b0: 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 31 t proc. */.@@ -1
92c0: 32 30 2c 36 20 2b 31 32 32 2c 37 20 40 40 0a 20 20,6 +122,7 @@.
92d0: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66 NULL,.../* f
92e0: 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 lush proc. */.
92f0: 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 61 NULL,.../* ha
9300: 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f 0a 20 ndler proc. */.
9310: 20 20 20 20 46 69 6c 65 57 69 64 65 53 65 65 6b FileWideSeek
9320: 50 72 6f 63 2c 09 09 2f 2a 20 57 69 64 65 20 73 Proc,../* Wide s
9330: 65 65 6b 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 eek proc. */.+
9340: 20 20 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 FileThreadActi
9350: 6f 6e 50 72 6f 63 2c 09 2f 2a 20 54 68 72 65 61 onProc,./* Threa
9360: 64 20 61 63 74 69 6f 6e 20 70 72 6f 63 2e 20 2a d action proc. *
9370: 2f 0a 20 7d 3b 0a 20 0a 20 23 69 66 20 64 65 66 /. };. . #if def
9380: 69 6e 65 64 28 48 41 56 45 5f 4e 4f 5f 53 45 48 ined(HAVE_NO_SEH
9390: 29 20 26 26 20 64 65 66 69 6e 65 64 28 54 43 4c ) && defined(TCL
93a0: 5f 4d 45 4d 5f 44 45 42 55 47 29 0a 40 40 20 2d _MEM_DEBUG).@@ -
93b0: 34 33 36 2c 31 31 20 2b 34 33 39 2c 31 31 20 40 436,11 +439,11 @
93c0: 40 0a 20 09 69 66 20 28 69 6e 66 6f 50 74 72 20 @. .if (infoPtr
93d0: 3d 3d 20 66 69 6c 65 49 6e 66 6f 50 74 72 29 20 == fileInfoPtr)
93e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2f {. /
93f0: 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 *.
9400: 2a 20 54 68 69 73 20 63 68 61 6e 6e 65 6c 20 65 * This channel e
9410: 78 69 73 74 73 20 6f 6e 20 74 68 65 20 74 68 72 xists on the thr
9420: 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74 2e 20 ead local list.
9430: 49 74 20 73 68 6f 75 6c 64 0a 2d 20 20 20 20 20 It should.-
9440: 20 20 20 20 20 20 20 20 2a 20 68 61 76 65 20 62 * have b
9450: 65 65 6e 20 72 65 6d 6f 76 65 64 20 62 79 20 61 een removed by a
9460: 6e 20 65 61 72 6c 69 65 72 20 63 61 6c 6c 20 74 n earlier call t
9470: 6f 20 54 63 6c 70 43 75 74 46 69 6c 65 43 68 61 o TclpCutFileCha
9480: 6e 6e 65 6c 2c 0a 2b 20 20 20 20 20 20 20 20 20 nnel,.+
9490: 20 20 20 20 2a 20 68 61 76 65 20 62 65 65 6e 20 * have been
94a0: 72 65 6d 6f 76 65 64 20 62 79 20 61 6e 20 65 61 removed by an ea
94b0: 72 6c 69 65 72 20 54 68 72 65 61 64 20 41 63 74 rlier Thread Act
94c0: 69 6f 6e 20 63 61 6c 6c 2c 0a 20 20 20 20 20 20 ion call,.
94d0: 20 20 20 20 20 20 20 20 2a 20 62 75 74 20 64 6f * but do
94e0: 20 74 68 61 74 20 6e 6f 77 20 73 69 6e 63 65 20 that now since
94f0: 6a 75 73 74 20 64 65 61 6c 6c 6f 63 61 74 69 6e just deallocatin
9500: 67 20 66 69 6c 65 49 6e 66 6f 50 74 72 20 77 6f g fileInfoPtr wo
9510: 75 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 uld.
9520: 20 20 2a 20 6c 65 61 76 65 20 61 6e 20 64 65 61 * leave an dea
9530: 6c 6c 6f 63 61 74 65 64 20 70 6f 69 6e 74 65 72 llocated pointer
9540: 20 6f 6e 20 74 68 65 20 74 68 72 65 61 64 20 6c on the thread l
9550: 6f 63 61 6c 20 6c 69 73 74 2e 0a 20 20 20 20 20 ocal list..
9560: 20 20 20 20 20 20 20 20 20 2a 2f 0a 2d 20 20 20 */.-
9570: 20 20 20 20 20 20 20 20 20 54 63 6c 70 43 75 74 TclpCut
9580: 46 69 6c 65 43 68 61 6e 6e 65 6c 28 66 69 6c 65 FileChannel(file
9590: 49 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c InfoPtr->channel
95a0: 29 3b 0a 2b 09 20 20 20 20 46 69 6c 65 54 68 72 );.+. FileThr
95b0: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 28 66 69 eadActionProc(fi
95c0: 6c 65 49 6e 66 6f 50 74 72 2c 54 43 4c 5f 43 48 leInfoPtr,TCL_CH
95d0: 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d ANNEL_THREAD_REM
95e0: 4f 56 45 29 3b 0a 20 20 20 20 20 20 20 20 20 20 OVE);.
95f0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 break;.
9600: 20 20 20 7d 0a 20 20 20 20 20 7d 0a 40 40 20 2d }. }.@@ -
9610: 31 33 31 39 2c 38 20 2b 31 33 32 32 2c 31 31 20 1319,8 +1322,11
9620: 40 40 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 @@. }. .
9630: 20 69 6e 66 6f 50 74 72 20 3d 20 28 46 69 6c 65 infoPtr = (File
9640: 49 6e 66 6f 20 2a 29 20 63 6b 61 6c 6c 6f 63 28 Info *) ckalloc(
9650: 28 75 6e 73 69 67 6e 65 64 29 20 73 69 7a 65 6f (unsigned) sizeo
9660: 66 28 46 69 6c 65 49 6e 66 6f 29 29 3b 0a 2d 20 f(FileInfo));.-
9670: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 78 74 infoPtr->next
9680: 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 66 69 Ptr = tsdPtr->fi
9690: 72 73 74 46 69 6c 65 50 74 72 3b 0a 2d 20 20 20 rstFilePtr;.-
96a0: 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46 69 tsdPtr->firstFi
96b0: 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50 74 72 3b lePtr = infoPtr;
96c0: 0a 2b 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 .+ /* TIP #21
96d0: 38 2e 20 52 65 6d 6f 76 65 64 20 74 68 65 20 63 8. Removed the c
96e0: 6f 64 65 20 69 6e 73 65 72 74 69 6e 67 20 74 68 ode inserting th
96f0: 65 20 6e 65 77 20 73 74 72 75 63 74 75 72 65 0a e new structure.
9700: 2b 20 20 20 20 20 2a 20 69 6e 74 6f 20 74 68 65 + * into the
9710: 20 67 6c 6f 62 61 6c 20 6c 69 73 74 2e 20 54 68 global list. Th
9720: 69 73 20 69 73 20 6e 6f 77 20 68 61 6e 64 6c 65 is is now handle
9730: 64 20 69 6e 20 74 68 65 20 74 68 72 65 61 64 0a d in the thread.
9740: 2b 20 20 20 20 20 2a 20 61 63 74 69 6f 6e 20 63 + * action c
9750: 61 6c 6c 62 61 63 6b 73 2c 20 61 6e 64 20 6f 6e allbacks, and on
9760: 6c 79 20 74 68 65 72 65 2e 0a 2b 20 20 20 20 20 ly there..+
9770: 2a 2f 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d */.+ infoPtr-
9780: 3e 6e 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c 3b >nextPtr = NULL;
9790: 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 76 . infoPtr->v
97a0: 61 6c 69 64 4d 61 73 6b 20 3d 20 70 65 72 6d 69 alidMask = permi
97b0: 73 73 69 6f 6e 73 3b 0a 20 20 20 20 20 69 6e 66 ssions;. inf
97c0: 6f 50 74 72 2d 3e 77 61 74 63 68 4d 61 73 6b 20 oPtr->watchMask
97d0: 3d 20 30 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 = 0;. infoPt
97e0: 72 2d 3e 66 6c 61 67 73 20 3d 20 61 70 70 65 6e r->flags = appen
97f0: 64 4d 6f 64 65 3b 0a 40 40 20 2d 31 33 38 39 2c dMode;.@@ -1389,
9800: 31 30 20 2b 31 33 39 35 2c 39 20 40 40 0a 20 2f 10 +1395,9 @@. /
9810: 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *. *-----------
9820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a -----------. *.
9860: 2d 20 2a 20 54 63 6c 70 43 75 74 46 69 6c 65 43 - * TclpCutFileC
9870: 68 61 6e 6e 65 6c 20 2d 2d 0a 2b 20 2a 20 46 69 hannel --.+ * Fi
9880: 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 leThreadActionPr
9890: 6f 63 20 2d 2d 0a 20 20 2a 0a 2d 20 2a 09 52 65 oc --. *.- *.Re
98a0: 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 64 20 move any thread
98b0: 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20 74 68 local refs to th
98c0: 69 73 20 63 68 61 6e 6e 65 6c 2e 20 53 65 65 0a is channel. See.
98d0: 2d 20 2a 09 54 63 6c 5f 43 75 74 43 68 61 6e 6e - *.Tcl_CutChann
98e0: 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f el for more info
98f0: 2e 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f 72 20 ..+ *.Insert or
9900: 72 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 remove any threa
9910: 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20 d local refs to
9920: 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 20 20 this channel..
9930: 2a 0a 20 20 2a 20 52 65 73 75 6c 74 73 3a 0a 20 *. * Results:.
9940: 20 2a 09 4e 6f 6e 65 2e 0a 40 40 20 2d 31 34 30 *.None..@@ -140
9950: 33 2c 32 33 20 2b 31 34 30 38 2c 32 31 20 40 40 3,23 +1408,21 @@
9960: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d . *------------
9970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
99a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a ----------. */.
99b0: 20 0a 2d 76 6f 69 64 0a 2d 54 63 6c 70 43 75 74 .-void.-TclpCut
99c0: 46 69 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61 6e FileChannel(chan
99d0: 29 0a 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e ).- Tcl_Chann
99e0: 65 6c 20 63 68 61 6e 3b 09 09 09 2f 2a 20 54 68 el chan;.../* Th
99f0: 65 20 63 68 61 6e 6e 65 6c 20 62 65 69 6e 67 20 e channel being
9a00: 72 65 6d 6f 76 65 64 2e 20 4d 75 73 74 0a 2d 20 removed. Must.-
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a30: 20 20 20 20 20 20 20 20 2a 20 6e 6f 74 20 62 65 * not be
9a40: 20 72 65 66 65 72 65 6e 63 65 64 20 69 6e 20 61 referenced in a
9a50: 6e 79 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 ny.-
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 * i
9a80: 6e 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2b nterpreter. */.+
9a90: 73 74 61 74 69 63 20 76 6f 69 64 0a 2b 46 69 6c static void.+Fil
9aa0: 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f eThreadActionPro
9ab0: 63 20 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c c (instanceData,
9ac0: 20 61 63 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43 action).+ C
9ad0: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e lientData instan
9ae0: 63 65 44 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e ceData;.+ in
9af0: 74 20 61 63 74 69 6f 6e 3b 0a 20 7b 0a 20 20 20 t action;. {.
9b00: 20 20 54 68 72 65 61 64 53 70 65 63 69 66 69 63 ThreadSpecific
9b10: 44 61 74 61 20 2a 74 73 64 50 74 72 20 3d 20 54 Data *tsdPtr = T
9b20: 43 4c 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74 CL_TSD_INIT(&dat
9b30: 61 4b 65 79 29 3b 0a 2d 20 20 20 20 43 68 61 6e aKey);.- Chan
9b40: 6e 65 6c 20 2a 63 68 61 6e 50 74 72 20 3d 20 28 nel *chanPtr = (
9b50: 43 68 61 6e 6e 65 6c 20 2a 29 20 63 68 61 6e 3b Channel *) chan;
9b60: 0a 2d 20 20 20 20 46 69 6c 65 49 6e 66 6f 20 2a .- FileInfo *
9b70: 69 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 46 69 infoPtr;.+ Fi
9b80: 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 20 leInfo *infoPtr
9b90: 3d 20 28 46 69 6c 65 49 6e 66 6f 20 2a 29 20 69 = (FileInfo *) i
9ba0: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 0a 2b nstanceData;.+.+
9bb0: 20 20 20 20 69 66 20 28 61 63 74 69 6f 6e 20 3d if (action =
9bc0: 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 = TCL_CHANNEL_TH
9bd0: 52 45 41 44 5f 49 4e 53 45 52 54 29 20 7b 0a 2b READ_INSERT) {.+
9be0: 20 20 20 20 20 20 20 20 69 6e 66 6f 50 74 72 2d infoPtr-
9bf0: 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50 74 >nextPtr = tsdPt
9c00: 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72 3b r->firstFilePtr;
9c10: 0a 2b 09 74 73 64 50 74 72 2d 3e 66 69 72 73 74 .+.tsdPtr->first
9c20: 46 69 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50 74 FilePtr = infoPt
9c30: 72 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b r;.+ } else {
9c40: 0a 20 20 20 20 20 46 69 6c 65 49 6e 66 6f 20 2a . FileInfo *
9c50: 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 20 20 20 *nextPtrPtr;.
9c60: 20 20 69 6e 74 20 72 65 6d 6f 76 65 64 20 3d 20 int removed =
9c70: 30 3b 0a 20 0a 2d 20 20 20 20 69 66 20 28 63 68 0;. .- if (ch
9c80: 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 72 20 21 anPtr->typePtr !
9c90: 3d 20 26 66 69 6c 65 43 68 61 6e 6e 65 6c 54 79 = &fileChannelTy
9ca0: 70 65 29 0a 2d 20 20 20 20 20 20 20 20 72 65 74 pe).- ret
9cb0: 75 72 6e 3b 0a 2d 0a 2d 20 20 20 20 69 6e 66 6f urn;.-.- info
9cc0: 50 74 72 20 3d 20 28 46 69 6c 65 49 6e 66 6f 20 Ptr = (FileInfo
9cd0: 2a 29 20 63 68 61 6e 50 74 72 2d 3e 69 6e 73 74 *) chanPtr->inst
9ce0: 61 6e 63 65 44 61 74 61 3b 0a 2d 0a 20 20 20 20 anceData;.-.
9cf0: 20 66 6f 72 20 28 6e 65 78 74 50 74 72 50 74 72 for (nextPtrPtr
9d00: 20 3d 20 26 28 74 73 64 50 74 72 2d 3e 66 69 72 = &(tsdPtr->fir
9d10: 73 74 46 69 6c 65 50 74 72 29 3b 20 28 2a 6e 65 stFilePtr); (*ne
9d20: 78 74 50 74 72 50 74 72 29 20 21 3d 20 4e 55 4c xtPtrPtr) != NUL
9d30: 4c 3b 0a 20 09 20 6e 65 78 74 50 74 72 50 74 72 L;. . nextPtrPtr
9d40: 20 3d 20 26 28 28 2a 6e 65 78 74 50 74 72 50 74 = &((*nextPtrPt
9d50: 72 29 2d 3e 6e 65 78 74 50 74 72 29 29 20 7b 0a r)->nextPtr)) {.
9d60: 20 09 69 66 20 28 28 2a 6e 65 78 74 50 74 72 50 .if ((*nextPtrP
9d70: 74 72 29 20 3d 3d 20 69 6e 66 6f 50 74 72 29 20 tr) == infoPtr)
9d80: 7b 0a 40 40 20 2d 31 34 33 35 2c 34 33 20 2b 31 {.@@ -1435,43 +1
9d90: 34 33 38 2c 38 20 40 40 0a 20 20 20 20 20 20 2a 438,8 @@. *
9da0: 20 6c 6f 63 61 6c 20 64 61 74 61 20 69 6e 20 65 local data in e
9db0: 61 63 68 20 74 68 72 65 61 64 2e 0a 20 20 20 20 ach thread..
9dc0: 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 69 66 20 28 */. .- if (
9dd0: 21 72 65 6d 6f 76 65 64 29 0a 2b 09 69 66 20 28 !removed).+.if (
9de0: 21 72 65 6d 6f 76 65 64 29 20 7b 0a 20 20 20 20 !removed) {.
9df0: 20 20 20 20 20 70 61 6e 69 63 28 22 66 69 6c 65 panic("file
9e00: 20 69 6e 66 6f 20 70 74 72 20 6e 6f 74 20 6f 6e info ptr not on
9e10: 20 74 68 72 65 61 64 20 63 68 61 6e 6e 65 6c 20 thread channel
9e20: 6c 69 73 74 22 29 3b 0a 2d 0a 20 7d 0a 2d 0c 0a list");.-. }.-..
9e30: 2d 2f 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d -/*.- *---------
9e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 -------------.-
9e80: 2a 0a 2d 20 2a 20 54 63 6c 70 53 70 6c 69 63 65 *.- * TclpSplice
9e90: 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2d FileChannel --.-
9ea0: 20 2a 0a 2d 20 2a 09 49 6e 73 65 72 74 20 74 68 *.- *.Insert th
9eb0: 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 20 66 read local ref f
9ec0: 6f 72 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e or this channel.
9ed0: 0a 2d 20 2a 09 54 63 6c 5f 53 70 6c 69 63 65 43 .- *.Tcl_SpliceC
9ee0: 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 hannel for more
9ef0: 69 6e 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 info..- *.- * Re
9f00: 73 75 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e sults:.- *.None.
9f10: 0a 2d 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 .- *.- * Side ef
9f20: 66 65 63 74 73 3a 0a 2d 20 2a 09 43 68 61 6e 67 fects:.- *.Chang
9f30: 65 73 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 es thread local
9f40: 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68 list of valid ch
9f50: 61 6e 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d 20 2a 2d annels..- *.- *-
9f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9fa0: 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f -----.- */.-.-vo
9fb0: 69 64 0a 2d 54 63 6c 70 53 70 6c 69 63 65 46 69 id.-TclpSpliceFi
9fc0: 6c 65 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a leChannel(chan).
9fd0: 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c - Tcl_Channel
9fe0: 20 63 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 chan;.../* The
9ff0: 63 68 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 channel being re
a000: 6d 6f 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20 moved. Must.-
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a030: 20 20 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72 * not be r
a040: 65 66 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 eferenced in any
a050: 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .-
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a070: 20 20 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 * int
a080: 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 7b 0a erpreter. */.-{.
a090: 2d 20 20 20 20 54 68 72 65 61 64 53 70 65 63 69 - ThreadSpeci
a0a0: 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 72 20 ficData *tsdPtr
a0b0: 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 28 26 = TCL_TSD_INIT(&
a0c0: 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20 20 43 dataKey);.- C
a0d0: 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 72 20 hannel *chanPtr
a0e0: 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63 68 = (Channel *) ch
a0f0: 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 49 6e 66 an;.- FileInf
a100: 6f 20 2a 69 6e 66 6f 50 74 72 3b 0a 2d 0a 2d 20 o *infoPtr;.-.-
a110: 20 20 20 69 66 20 28 63 68 61 6e 50 74 72 2d 3e if (chanPtr->
a120: 74 79 70 65 50 74 72 20 21 3d 20 26 66 69 6c 65 typePtr != &file
a130: 43 68 61 6e 6e 65 6c 54 79 70 65 29 0a 2d 20 20 ChannelType).-
a140: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d 0a return;.-.
a150: 2d 20 20 20 20 69 6e 66 6f 50 74 72 20 3d 20 28 - infoPtr = (
a160: 46 69 6c 65 49 6e 66 6f 20 2a 29 20 63 68 61 6e FileInfo *) chan
a170: 50 74 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74 Ptr->instanceDat
a180: 61 3b 0a 2d 0a 2d 20 20 20 20 69 6e 66 6f 50 74 a;.-.- infoPt
a190: 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 r->nextPtr = tsd
a1a0: 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 Ptr->firstFilePt
a1b0: 72 3b 0a 2d 20 20 20 20 74 73 64 50 74 72 2d 3e r;.- tsdPtr->
a1c0: 66 69 72 73 74 46 69 6c 65 50 74 72 20 3d 20 69 firstFilePtr = i
a1d0: 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 7d 0a 20 nfoPtr;.+ }.
a1e0: 7d 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 63 6c }.Index: win/tcl
a1f0: 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 0a 3d 3d 3d WinConsole.c.===
a200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a240: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
a250: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 6e 2f oot/tcl/tcl/win/
a260: 74 63 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 2c tclWinConsole.c,
a270: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 v.retrieving rev
a280: 69 73 69 6f 6e 20 31 2e 31 31 0a 64 69 66 66 20 ision 1.11.diff
a290: 2d 77 20 2d 75 20 2d 72 31 2e 31 31 20 74 63 6c -w -u -r1.11 tcl
a2a0: 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 0a 2d 2d 2d WinConsole.c.---
a2b0: 20 77 69 6e 2f 74 63 6c 57 69 6e 43 6f 6e 73 6f win/tclWinConso
a2c0: 6c 65 2e 63 09 32 36 20 4e 6f 76 20 32 30 30 32 le.c.26 Nov 2002
a2d0: 20 32 32 3a 34 31 3a 35 38 20 2d 30 30 30 30 09 22:41:58 -0000.
a2e0: 31 2e 31 31 0a 2b 2b 2b 20 77 69 6e 2f 74 63 6c 1.11.+++ win/tcl
a2f0: 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 09 32 37 20 WinConsole.c.27
a300: 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a 31 Jan 2005 22:49:1
a310: 39 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 38 2c 9 -0000.@@ -148,
a320: 37 20 2b 31 34 38 2c 37 20 40 40 0a 20 73 74 61 7 +148,7 @@. sta
a330: 74 69 63 20 76 6f 69 64 09 09 43 6f 6e 73 6f 6c tic void..Consol
a340: 65 45 78 69 74 48 61 6e 64 6c 65 72 28 43 6c 69 eExitHandler(Cli
a350: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
a360: 74 61 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 ta);. static int
a370: 09 09 43 6f 6e 73 6f 6c 65 47 65 74 48 61 6e 64 ..ConsoleGetHand
a380: 6c 65 50 72 6f 63 28 43 6c 69 65 6e 74 44 61 74 leProc(ClientDat
a390: 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a a instanceData,.
a3a0: 20 09 09 09 20 20 20 20 69 6e 74 20 64 69 72 65 ... int dire
a3b0: 63 74 69 6f 6e 2c 20 43 6c 69 65 6e 74 44 61 74 ction, ClientDat
a3c0: 61 20 2a 68 61 6e 64 6c 65 50 74 72 29 3b 0a 2d a *handlePtr);.-
a3d0: 73 74 61 74 69 63 20 54 68 72 65 61 64 53 70 65 static ThreadSpe
a3e0: 63 69 66 69 63 44 61 74 61 20 2a 43 6f 6e 73 6f cificData *Conso
a3f0: 6c 65 49 6e 69 74 28 76 6f 69 64 29 3b 0a 2b 73 leInit(void);.+s
a400: 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20 20 tatic void
a410: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 49 6e ConsoleIn
a420: 69 74 28 76 6f 69 64 29 3b 0a 20 73 74 61 74 69 it(void);. stati
a430: 63 20 69 6e 74 09 09 43 6f 6e 73 6f 6c 65 49 6e c int..ConsoleIn
a440: 70 75 74 50 72 6f 63 28 43 6c 69 65 6e 74 44 61 putProc(ClientDa
a450: 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c ta instanceData,
a460: 20 63 68 61 72 20 2a 62 75 66 2c 0a 20 09 09 09 char *buf,. ...
a470: 20 20 20 20 69 6e 74 20 74 6f 52 65 61 64 2c 20 int toRead,
a480: 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29 3b int *errorCode);
a490: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 43 6f . static int..Co
a4a0: 6e 73 6f 6c 65 4f 75 74 70 75 74 50 72 6f 63 28 nsoleOutputProc(
a4b0: 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 ClientData insta
a4c0: 6e 63 65 44 61 74 61 2c 0a 40 40 20 2d 31 36 30 nceData,.@@ -160
a4d0: 2c 36 20 2b 31 36 30 2c 39 20 40 40 0a 20 73 74 ,6 +160,9 @@. st
a4e0: 61 74 69 63 20 76 6f 69 64 09 09 50 72 6f 63 45 atic void..ProcE
a4f0: 78 69 74 48 61 6e 64 6c 65 72 28 43 6c 69 65 6e xitHandler(Clien
a500: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 tData clientData
a510: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 );. static int..
a520: 57 61 69 74 46 6f 72 52 65 61 64 28 43 6f 6e 73 WaitForRead(Cons
a530: 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 oleInfo *infoPtr
a540: 2c 20 69 6e 74 20 62 6c 6f 63 6b 69 6e 67 29 3b , int blocking);
a550: 0a 20 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 20 . .+static void
a560: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 Cons
a570: 6f 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 oleThreadActionP
a580: 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20 roc _ANSI_ARGS_
a590: 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e 74 ((.+... Client
a5a0: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 Data instanceDat
a5b0: 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b a, int action));
a5c0: 0a 2b 0a 20 2f 2a 0a 20 20 2a 20 54 68 69 73 20 .+. /*. * This
a5d0: 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 structure descri
a5e0: 62 65 73 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 bes the channel
a5f0: 74 79 70 65 20 73 74 72 75 63 74 75 72 65 20 66 type structure f
a600: 6f 72 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e 73 6f or command conso
a610: 6c 65 0a 20 20 2a 20 62 61 73 65 64 20 49 4f 2e le. * based IO.
a620: 0a 40 40 20 2d 31 36 37 2c 37 20 2b 31 37 30 2c .@@ -167,7 +170,
a630: 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54 7 @@. . static T
a640: 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 63 cl_ChannelType c
a650: 6f 6e 73 6f 6c 65 43 68 61 6e 6e 65 6c 54 79 70 onsoleChannelTyp
a660: 65 20 3d 20 7b 0a 20 20 20 20 20 22 63 6f 6e 73 e = {. "cons
a670: 6f 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 20 ole",.../* Type
a680: 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 43 name. */.- TC
a690: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
a6a0: 4e 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e N_2,./* v2 chann
a6b0: 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 el */.+ TCL_C
a6c0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 HANNEL_VERSION_4
a6d0: 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 ,./* v4 channel
a6e0: 2a 2f 0a 20 20 20 20 20 43 6f 6e 73 6f 6c 65 43 */. ConsoleC
a6f0: 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 43 6c loseProc,../* Cl
a700: 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 ose proc. */.
a710: 20 20 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 50 72 ConsoleInputPr
a720: 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 oc,../* Input pr
a730: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 43 6f 6e 73 oc. */. Cons
a740: 6f 6c 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 oleOutputProc,..
a750: 2f 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 /* Output proc.
a760: 2a 2f 0a 40 40 20 2d 31 38 30 2c 36 20 2b 31 38 */.@@ -180,6 +18
a770: 33 2c 38 20 40 40 0a 20 20 20 20 20 43 6f 6e 73 3,8 @@. Cons
a780: 6f 6c 65 42 6c 6f 63 6b 4d 6f 64 65 50 72 6f 63 oleBlockModeProc
a790: 2c 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b 69 6e ,./* Set blockin
a7a0: 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e g or non-blockin
a7b0: 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 20 20 4e g mode.*/. N
a7c0: 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 68 20 ULL,.../* flush
a7d0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 proc. */. NU
a7e0: 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c 65 72 LL,.../* handler
a7f0: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e proc. */.+ N
a800: 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20 ULL,
a810: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 77 69 /* wi
a820: 64 65 20 73 65 65 6b 20 70 72 6f 63 20 2a 2f 0a de seek proc */.
a830: 2b 20 20 20 20 43 6f 6e 73 6f 6c 65 54 68 72 65 + ConsoleThre
a840: 61 64 41 63 74 69 6f 6e 50 72 6f 63 2c 20 20 20 adActionProc,
a850: 20 2f 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f /* thread actio
a860: 6e 20 70 72 6f 63 20 2a 2f 0a 20 7d 3b 0a 20 0c n proc */. };. .
a870: 0a 20 2f 2a 0a 40 40 20 2d 31 39 38 2c 37 20 2b . /*.@@ -198,7 +
a880: 32 30 33 2c 37 20 40 40 0a 20 20 2a 2d 2d 2d 2d 203,7 @@. *----
a890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a8a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a8b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a8c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a8d0: 2d 2d 0a 20 20 2a 2f 0a 20 0a 2d 73 74 61 74 69 --. */. .-stati
a8e0: 63 20 54 68 72 65 61 64 53 70 65 63 69 66 69 63 c ThreadSpecific
a8f0: 44 61 74 61 20 2a 0a 2b 73 74 61 74 69 63 20 76 Data *.+static v
a900: 6f 69 64 0a 20 43 6f 6e 73 6f 6c 65 49 6e 69 74 oid. ConsoleInit
a910: 28 29 0a 20 7b 0a 20 20 20 20 20 54 68 72 65 61 (). {. Threa
a920: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 dSpecificData *t
a930: 73 64 50 74 72 3b 0a 40 40 20 2d 32 32 34 2c 37 sdPtr;.@@ -224,7
a940: 20 2b 32 32 39 2c 36 20 40 40 0a 20 09 54 63 6c +229,6 @@. .Tcl
a950: 5f 43 72 65 61 74 65 45 76 65 6e 74 53 6f 75 72 _CreateEventSour
a960: 63 65 28 43 6f 6e 73 6f 6c 65 53 65 74 75 70 50 ce(ConsoleSetupP
a970: 72 6f 63 2c 20 43 6f 6e 73 6f 6c 65 43 68 65 63 roc, ConsoleChec
a980: 6b 50 72 6f 63 2c 20 4e 55 4c 4c 29 3b 0a 20 09 kProc, NULL);. .
a990: 54 63 6c 5f 43 72 65 61 74 65 54 68 72 65 61 64 Tcl_CreateThread
a9a0: 45 78 69 74 48 61 6e 64 6c 65 72 28 43 6f 6e 73 ExitHandler(Cons
a9b0: 6f 6c 65 45 78 69 74 48 61 6e 64 6c 65 72 2c 20 oleExitHandler,
a9c0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 7d 0a 2d 20 NULL);. }.-
a9d0: 20 20 20 72 65 74 75 72 6e 20 74 73 64 50 74 72 return tsdPtr
a9e0: 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d ;. }. .. /*.@@ -
a9f0: 31 31 37 30 2c 37 20 2b 31 31 37 34 2c 31 30 20 1170,7 +1174,10
aa00: 40 40 0a 20 09 20 2a 2f 0a 20 0a 20 09 54 63 6c @@. . */. . .Tcl
aa10: 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 63 6f 6e 73 _MutexLock(&cons
aa20: 6f 6c 65 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20 oleMutex);.+.if
aa30: 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 (infoPtr->thread
aa40: 49 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 Id != NULL) {.+.
aa50: 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e /* TIP #218.
aa60: 20 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20 When in flight
aa70: 69 67 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74 ignore the event
aa80: 2c 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65 , no one will re
aa90: 63 65 69 76 65 20 69 74 20 61 6e 79 77 61 79 20 ceive it anyway
aaa0: 2a 2f 0a 20 09 54 63 6c 5f 54 68 72 65 61 64 41 */. .Tcl_ThreadA
aab0: 6c 65 72 74 28 69 6e 66 6f 50 74 72 2d 3e 74 68 lert(infoPtr->th
aac0: 72 65 61 64 49 64 29 3b 0a 2b 09 7d 0a 20 09 54 readId);.+.}. .T
aad0: 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 cl_MutexUnlock(&
aae0: 63 6f 6e 73 6f 6c 65 4d 75 74 65 78 29 3b 0a 20 consoleMutex);.
aaf0: 20 20 20 20 7d 0a 20 0a 40 40 20 2d 31 32 35 36 }. .@@ -1256
ab00: 2c 37 20 2b 31 32 36 33 2c 31 30 20 40 40 0a 20 ,7 +1263,10 @@.
ab10: 09 20 2a 2f 0a 20 0a 20 09 54 63 6c 5f 4d 75 74 . */. . .Tcl_Mut
ab20: 65 78 4c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 4d exLock(&consoleM
ab30: 75 74 65 78 29 3b 0a 2b 09 69 66 20 28 69 6e 66 utex);.+.if (inf
ab40: 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20 21 oPtr->threadId !
ab50: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 = NULL) {.+.
ab60: 2f 2a 20 54 49 50 20 23 32 31 38 2e 20 57 68 65 /* TIP #218. Whe
ab70: 6e 20 69 6e 20 66 6c 69 67 68 74 20 69 67 6e 6f n in flight igno
ab80: 72 65 20 74 68 65 20 65 76 65 6e 74 2c 20 6e 6f re the event, no
ab90: 20 6f 6e 65 20 77 69 6c 6c 20 72 65 63 65 69 76 one will receiv
aba0: 65 20 69 74 20 61 6e 79 77 61 79 20 2a 2f 0a 20 e it anyway */.
abb0: 09 54 63 6c 5f 54 68 72 65 61 64 41 6c 65 72 74 .Tcl_ThreadAlert
abc0: 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 (infoPtr->thread
abd0: 49 64 29 3b 0a 2b 09 7d 0a 20 09 54 63 6c 5f 4d Id);.+.}. .Tcl_M
abe0: 75 74 65 78 55 6e 6c 6f 63 6b 28 26 63 6f 6e 73 utexUnlock(&cons
abf0: 6f 6c 65 4d 75 74 65 78 29 3b 0a 20 20 20 20 20 oleMutex);.
ac00: 7d 0a 20 0a 40 40 20 2d 31 32 39 31 2c 31 30 20 }. .@@ -1291,10
ac10: 2b 31 33 30 31 2c 39 20 40 40 0a 20 7b 0a 20 20 +1301,9 @@. {.
ac20: 20 20 20 63 68 61 72 20 65 6e 63 6f 64 69 6e 67 char encoding
ac30: 5b 34 20 2b 20 54 43 4c 5f 49 4e 54 45 47 45 52 [4 + TCL_INTEGER
ac40: 5f 53 50 41 43 45 5d 3b 0a 20 20 20 20 20 43 6f _SPACE];. Co
ac50: 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 nsoleInfo *infoP
ac60: 74 72 3b 0a 2d 20 20 20 20 54 68 72 65 61 64 53 tr;.- ThreadS
ac70: 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 pecificData *tsd
ac80: 50 74 72 3b 0a 20 20 20 20 20 44 57 4f 52 44 20 Ptr;. DWORD
ac90: 69 64 2c 20 6d 6f 64 65 73 3b 0a 20 0a 2d 20 20 id, modes;. .-
aca0: 20 20 74 73 64 50 74 72 20 3d 20 43 6f 6e 73 6f tsdPtr = Conso
acb0: 6c 65 49 6e 69 74 28 29 3b 0a 2b 20 20 20 20 43 leInit();.+ C
acc0: 6f 6e 73 6f 6c 65 49 6e 69 74 28 29 3b 0a 20 0a onsoleInit();. .
acd0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 /*. *
ace0: 53 65 65 20 69 66 20 61 20 63 68 61 6e 6e 65 6c See if a channel
acf0: 20 77 69 74 68 20 74 68 69 73 20 68 61 6e 64 6c with this handl
ad00: 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 e already exists
ad10: 2e 0a 40 40 20 2d 31 33 30 35 2c 39 20 2b 31 33 ..@@ -1305,9 +13
ad20: 31 34 2c 31 32 20 40 40 0a 20 0a 20 20 20 20 20 14,12 @@. .
ad30: 69 6e 66 6f 50 74 72 2d 3e 76 61 6c 69 64 4d 61 infoPtr->validMa
ad40: 73 6b 20 3d 20 70 65 72 6d 69 73 73 69 6f 6e 73 sk = permissions
ad50: 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e ;. infoPtr->
ad60: 68 61 6e 64 6c 65 20 3d 20 68 61 6e 64 6c 65 3b handle = handle;
ad70: 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 63 .+ infoPtr->c
ad80: 68 61 6e 6e 65 6c 20 3d 20 28 54 63 6c 5f 43 68 hannel = (Tcl_Ch
ad90: 61 6e 6e 65 6c 29 20 4e 55 4c 4c 3b 0a 20 0a 20 annel) NULL;. .
ada0: 20 20 20 20 77 73 70 72 69 6e 74 66 41 28 65 6e wsprintfA(en
adb0: 63 6f 64 69 6e 67 2c 20 22 63 70 25 64 22 2c 20 coding, "cp%d",
adc0: 47 65 74 43 6f 6e 73 6f 6c 65 43 50 28 29 29 3b GetConsoleCP());
add0: 0a 20 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d . .+ infoPtr-
ade0: 3e 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f >threadId = Tcl_
adf0: 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 GetCurrentThread
ae00: 28 29 3b 0a 2b 0a 20 20 20 20 20 2f 2a 0a 20 20 ();.+. /*.
ae10: 20 20 20 20 2a 20 55 73 65 20 74 68 65 20 70 6f * Use the po
ae20: 69 6e 74 65 72 20 66 6f 72 20 74 68 65 20 6e 61 inter for the na
ae30: 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 me of the result
ae40: 20 63 68 61 6e 6e 65 6c 2e 0a 20 20 20 20 20 20 channel..
ae50: 2a 20 54 68 69 73 20 6b 65 65 70 73 20 74 68 65 * This keeps the
ae60: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 73 20 75 channel names u
ae70: 6e 69 71 75 65 2c 20 73 69 6e 63 65 20 73 6f 6d nique, since som
ae80: 65 20 6d 61 79 20 73 68 61 72 65 0a 40 40 20 2d e may share.@@ -
ae90: 31 33 31 39 2c 38 20 2b 31 33 33 31 2c 36 20 40 1319,8 +1331,6 @
aea0: 40 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e @. infoPtr->
aeb0: 63 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 43 72 channel = Tcl_Cr
aec0: 65 61 74 65 43 68 61 6e 6e 65 6c 28 26 63 6f 6e eateChannel(&con
aed0: 73 6f 6c 65 43 68 61 6e 6e 65 6c 54 79 70 65 2c soleChannelType,
aee0: 20 63 68 61 6e 6e 65 6c 4e 61 6d 65 2c 0a 20 20 channelName,.
aef0: 20 20 20 20 20 20 20 20 20 20 20 28 43 6c 69 65 (Clie
af00: 6e 74 44 61 74 61 29 20 69 6e 66 6f 50 74 72 2c ntData) infoPtr,
af10: 20 70 65 72 6d 69 73 73 69 6f 6e 73 29 3b 0a 20 permissions);.
af20: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 74 .- infoPtr->t
af30: 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f 47 65 hreadId = Tcl_Ge
af40: 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 28 29 tCurrentThread()
af50: 3b 0a 2d 0a 20 20 20 20 20 69 66 20 28 70 65 72 ;.-. if (per
af60: 6d 69 73 73 69 6f 6e 73 20 26 20 54 43 4c 5f 52 missions & TCL_R
af70: 45 41 44 41 42 4c 45 29 20 7b 0a 20 09 2f 2a 0a EADABLE) {. ./*.
af80: 20 09 20 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 . * Make sure t
af90: 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 70 75 74 he console input
afa0: 20 62 75 66 66 65 72 20 69 73 20 72 65 61 64 79 buffer is ready
afb0: 20 66 6f 72 20 6f 6e 6c 79 20 63 68 61 72 61 63 for only charac
afc0: 74 65 72 0a 40 40 20 2d 31 33 36 31 2c 33 20 2b ter.@@ -1361,3 +
afd0: 31 33 37 31 2c 35 31 20 40 40 0a 20 0a 20 20 20 1371,51 @@. .
afe0: 20 20 72 65 74 75 72 6e 20 69 6e 66 6f 50 74 72 return infoPtr
aff0: 2d 3e 63 68 61 6e 6e 65 6c 3b 0a 20 7d 0a 2b 0c ->channel;. }.+.
b000: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+/*.+ *--------
b010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b --------------.+
b050: 20 2a 0a 2b 20 2a 20 43 6f 6e 73 6f 6c 65 54 68 *.+ * ConsoleTh
b060: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2d readActionProc -
b070: 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e 73 65 72 74 -.+ *.+ *.Insert
b080: 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20 74 or remove any t
b090: 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 hread local refs
b0a0: 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c to this channel
b0b0: 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 ..+ *.+ * Result
b0c0: 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a s:.+ *.None..+ *
b0d0: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 .+ * Side effect
b0e0: 73 3a 0a 2b 20 2a 09 43 68 61 6e 67 65 73 20 74 s:.+ *.Changes t
b0f0: 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74 hread local list
b100: 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e 6e 65 of valid channe
b110: 6c 73 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d ls..+ *.+ *-----
b120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b160: 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 -.+ */.+.+static
b170: 20 76 6f 69 64 0a 2b 43 6f 6e 73 6f 6c 65 54 68 void.+ConsoleTh
b180: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 readActionProc (
b190: 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 61 63 instanceData, ac
b1a0: 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43 6c 69 65 tion).+ Clie
b1b0: 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 ntData instanceD
b1c0: 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e 74 20 61 ata;.+ int a
b1d0: 63 74 69 6f 6e 3b 0a 2b 7b 0a 2b 20 20 20 20 43 ction;.+{.+ C
b1e0: 6f 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f onsoleInfo *info
b1f0: 50 74 72 20 3d 20 28 43 6f 6e 73 6f 6c 65 49 6e Ptr = (ConsoleIn
b200: 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 fo *) instanceDa
b210: 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20 57 65 ta;.+.+ /* We
b220: 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73 20 66 do not access f
b230: 69 72 73 74 43 6f 6e 73 6f 6c 65 50 74 72 20 69 irstConsolePtr i
b240: 6e 20 74 68 65 20 74 68 72 65 61 64 20 73 74 72 n the thread str
b250: 75 63 74 75 72 65 73 2e 20 54 68 69 73 20 69 73 uctures. This is
b260: 0a 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 6f 72 .+ * not for
b270: 20 61 6c 6c 20 73 65 72 69 61 6c 73 20 6d 61 6e all serials man
b280: 61 67 65 64 20 62 79 20 74 68 65 20 74 68 72 65 aged by the thre
b290: 61 64 2c 20 62 75 74 20 6f 6e 6c 79 20 74 68 6f ad, but only tho
b2a0: 73 65 20 77 65 20 61 72 65 0a 2b 20 20 20 20 20 se we are.+
b2b0: 2a 20 77 61 74 63 68 69 6e 67 2e 20 52 65 6d 6f * watching. Remo
b2c0: 76 61 6c 20 6f 66 20 74 68 65 20 66 69 6c 65 76 val of the filev
b2d0: 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 62 65 66 ent handlers bef
b2e0: 6f 72 65 20 74 72 61 6e 73 66 65 72 20 74 68 75 ore transfer thu
b2f0: 73 0a 2b 20 20 20 20 20 2a 20 74 61 6b 65 73 20 s.+ * takes
b300: 63 61 72 65 20 6f 66 20 74 68 69 73 20 73 74 72 care of this str
b310: 75 63 74 75 72 65 2e 0a 2b 20 20 20 20 20 2a 2f ucture..+ */
b320: 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 .+.+ Tcl_Mute
b330: 78 4c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 4d 75 xLock(&consoleMu
b340: 74 65 78 29 3b 0a 2b 20 20 20 20 69 66 20 28 61 tex);.+ if (a
b350: 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 ction == TCL_CHA
b360: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 NNEL_THREAD_INSE
b370: 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f RT) {.+ /
b380: 2a 20 57 65 20 63 61 6e 27 74 20 63 6f 70 79 20 * We can't copy
b390: 74 68 65 20 74 68 72 65 61 64 20 69 6e 66 6f 72 the thread infor
b3a0: 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 mation from the
b3b0: 63 68 61 6e 6e 65 6c 20 77 68 65 6e 0a 2b 09 20 channel when.+.
b3c0: 2a 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 69 73 * the channel is
b3d0: 20 63 72 65 61 74 65 64 2e 20 41 74 20 74 68 69 created. At thi
b3e0: 73 20 74 69 6d 65 20 74 68 65 20 63 68 61 6e 6e s time the chann
b3f0: 65 6c 20 62 61 63 6b 0a 2b 09 20 2a 20 70 6f 69 el back.+. * poi
b400: 6e 74 65 72 20 68 61 73 20 6e 6f 74 20 62 65 65 nter has not bee
b410: 6e 20 73 65 74 20 79 65 74 2e 20 48 6f 77 65 76 n set yet. Howev
b420: 65 72 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 er in that case
b430: 74 68 65 0a 2b 09 20 2a 20 74 68 72 65 61 64 49 the.+. * threadI
b440: 64 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 d has already be
b450: 65 6e 20 73 65 74 20 62 79 20 54 63 6c 70 43 72 en set by TclpCr
b460: 65 61 74 65 43 6f 6d 6d 61 6e 64 43 68 61 6e 6e eateCommandChann
b470: 65 6c 0a 2b 09 20 2a 20 69 74 73 65 6c 66 2c 20 el.+. * itself,
b480: 73 6f 20 74 68 65 20 73 74 72 75 63 74 75 72 65 so the structure
b490: 20 69 73 20 73 74 69 6c 6c 20 67 6f 6f 64 2e 0a is still good..
b4a0: 2b 09 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 20 20 +. */.+.+
b4b0: 20 43 6f 6e 73 6f 6c 65 49 6e 69 74 20 28 29 3b ConsoleInit ();
b4c0: 0a 2b 20 20 20 20 20 20 20 20 69 66 20 28 69 6e .+ if (in
b4d0: 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 21 foPtr->channel !
b4e0: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 = NULL) {.+.
b4f0: 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 infoPtr->threadI
b500: 64 20 3d 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e d = Tcl_GetChann
b510: 65 6c 54 68 72 65 61 64 20 28 69 6e 66 6f 50 74 elThread (infoPt
b520: 72 2d 3e 63 68 61 6e 6e 65 6c 29 3b 0a 2b 09 7d r->channel);.+.}
b530: 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b .+ } else {.+
b540: 09 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 .infoPtr->thread
b550: 49 64 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 Id = NULL;.+
b560: 7d 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 }.+ Tcl_Mutex
b570: 55 6e 6c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 4d Unlock(&consoleM
b580: 75 74 65 78 29 3b 0a 2b 7d 0a 49 6e 64 65 78 3a utex);.+}.Index:
b590: 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e win/tclWinPipe.
b5a0: 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d c.==============
b5b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b5c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b5d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
b5e0: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 =====.RCS file:
b5f0: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c /cvsroot/tcl/tcl
b600: 2f 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e /win/tclWinPipe.
b610: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 c,v.retrieving r
b620: 65 76 69 73 69 6f 6e 20 31 2e 33 33 2e 32 2e 38 evision 1.33.2.8
b630: 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e .diff -w -u -r1.
b640: 33 33 2e 32 2e 38 20 74 63 6c 57 69 6e 50 69 70 33.2.8 tclWinPip
b650: 65 2e 63 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 e.c.--- win/tclW
b660: 69 6e 50 69 70 65 2e 63 09 31 30 20 4d 61 79 20 inPipe.c.10 May
b670: 32 30 30 34 20 32 30 3a 35 35 3a 34 34 20 2d 30 2004 20:55:44 -0
b680: 30 30 30 09 31 2e 33 33 2e 32 2e 38 0a 2b 2b 2b 000.1.33.2.8.+++
b690: 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 2e win/tclWinPipe.
b6a0: 63 09 32 37 20 4a 61 6e 20 32 30 30 35 20 32 32 c.27 Jan 2005 22
b6b0: 3a 34 39 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 :49:19 -0000.@@
b6c0: 2d 32 30 35 2c 36 20 2b 32 30 35 2c 39 20 40 40 -205,6 +205,9 @@
b6d0: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 54 65 . static int..Te
b6e0: 6d 70 46 69 6c 65 4e 61 6d 65 28 57 43 48 41 52 mpFileName(WCHAR
b6f0: 20 6e 61 6d 65 5b 4d 41 58 5f 50 41 54 48 5d 29 name[MAX_PATH])
b700: 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 57 ;. static int..W
b710: 61 69 74 46 6f 72 52 65 61 64 28 50 69 70 65 49 aitForRead(PipeI
b720: 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 2c 20 69 6e nfo *infoPtr, in
b730: 74 20 62 6c 6f 63 6b 69 6e 67 29 3b 0a 20 0a 2b t blocking);. .+
b740: 73 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20 static void
b750: 20 20 20 20 20 20 20 20 50 69 70 65 54 68 72 65 PipeThre
b760: 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 4e adActionProc _AN
b770: 53 49 5f 41 52 47 53 5f 20 28 28 0a 2b 09 09 09 SI_ARGS_ ((.+...
b780: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e ClientData in
b790: 73 74 61 6e 63 65 44 61 74 61 2c 20 69 6e 74 20 stanceData, int
b7a0: 61 63 74 69 6f 6e 29 29 3b 0a 2b 0a 20 2f 2a 0a action));.+. /*.
b7b0: 20 20 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 * This structu
b7c0: 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 re describes the
b7d0: 20 63 68 61 6e 6e 65 6c 20 74 79 70 65 20 73 74 channel type st
b7e0: 72 75 63 74 75 72 65 20 66 6f 72 20 63 6f 6d 6d ructure for comm
b7f0: 61 6e 64 20 70 69 70 65 0a 20 20 2a 20 62 61 73 and pipe. * bas
b800: 65 64 20 49 4f 2e 0a 40 40 20 2d 32 31 32 2c 37 ed IO..@@ -212,7
b810: 20 2b 32 31 35 2c 37 20 40 40 0a 20 0a 20 73 74 +215,7 @@. . st
b820: 61 74 69 63 20 54 63 6c 5f 43 68 61 6e 6e 65 6c atic Tcl_Channel
b830: 54 79 70 65 20 70 69 70 65 43 68 61 6e 6e 65 6c Type pipeChannel
b840: 54 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22 70 Type = {. "p
b850: 69 70 65 22 2c 09 09 09 2f 2a 20 54 79 70 65 20 ipe",.../* Type
b860: 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 54 43 name. */.- TC
b870: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
b880: 4e 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 6e 6e N_2,./* v2 chann
b890: 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 el */.+ TCL_C
b8a0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 HANNEL_VERSION_4
b8b0: 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 ,./* v4 channel
b8c0: 2a 2f 0a 20 20 20 20 20 54 43 4c 5f 43 4c 4f 53 */. TCL_CLOS
b8d0: 45 32 50 52 4f 43 2c 09 09 2f 2a 20 43 6c 6f 73 E2PROC,../* Clos
b8e0: 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 e proc. */.
b8f0: 50 69 70 65 49 6e 70 75 74 50 72 6f 63 2c 09 09 PipeInputProc,..
b900: 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a /* Input proc. *
b910: 2f 0a 20 20 20 20 20 50 69 70 65 4f 75 74 70 75 /. PipeOutpu
b920: 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 70 75 tProc,../* Outpu
b930: 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d 32 t proc. */.@@ -2
b940: 32 35 2c 36 20 2b 32 32 38 2c 38 20 40 40 0a 20 25,6 +228,8 @@.
b950: 20 20 20 20 50 69 70 65 42 6c 6f 63 6b 4d 6f 64 PipeBlockMod
b960: 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65 74 20 62 eProc,../* Set b
b970: 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 locking or non-b
b980: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a locking mode.*/.
b990: 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 NULL,.../*
b9a0: 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 flush proc. */.
b9b0: 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 NULL,.../* h
b9c0: 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f 0a andler proc. */.
b9d0: 2b 20 20 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20 + NULL,
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b9f0: 20 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70 72 /* wide seek pr
ba00: 6f 63 20 2a 2f 0a 2b 20 20 20 20 50 69 70 65 54 oc */.+ PipeT
ba10: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 2c hreadActionProc,
ba20: 20 20 20 20 20 20 20 2f 2a 20 74 68 72 65 61 64 /* thread
ba30: 20 61 63 74 69 6f 6e 20 70 72 6f 63 20 2a 2f 0a action proc */.
ba40: 20 7d 3b 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 31 };. .. /*.@@ -1
ba50: 36 38 39 2c 36 20 2b 31 36 39 34 2c 37 20 40 40 689,6 +1694,7 @@
ba60: 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 77 . infoPtr->w
ba70: 72 69 74 65 42 75 66 20 3d 20 30 3b 0a 20 20 20 riteBuf = 0;.
ba80: 20 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 65 infoPtr->write
ba90: 42 75 66 4c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 BufLen = 0;.
baa0: 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 65 45 infoPtr->writeE
bab0: 72 72 6f 72 20 3d 20 30 3b 0a 2b 20 20 20 20 69 rror = 0;.+ i
bac0: 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 nfoPtr->channel
bad0: 3d 20 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 29 20 = (Tcl_Channel)
bae0: 4e 55 4c 4c 3b 0a 20 0a 20 20 20 20 20 2f 2a 0a NULL;. . /*.
baf0: 20 20 20 20 20 20 2a 20 55 73 65 20 6f 6e 65 20 * Use one
bb00: 6f 66 20 74 68 65 20 66 64 73 20 61 73 73 6f 63 of the fds assoc
bb10: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63 iated with the c
bb20: 68 61 6e 6e 65 6c 20 61 73 20 74 68 65 0a 40 40 hannel as the.@@
bb30: 20 2d 32 39 33 31 2c 37 20 2b 32 39 33 37 2c 31 -2931,7 +2937,1
bb40: 30 20 40 40 0a 20 09 20 2a 2f 0a 20 0a 20 09 54 0 @@. . */. . .T
bb50: 63 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 70 69 cl_MutexLock(&pi
bb60: 70 65 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20 28 peMutex);.+.if (
bb70: 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 infoPtr->threadI
bb80: 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 d != NULL) {.+.
bb90: 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e 20 /* TIP #218.
bba0: 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20 69 When in flight i
bbb0: 67 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74 2c gnore the event,
bbc0: 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65 63 no one will rec
bbd0: 65 69 76 65 20 69 74 20 61 6e 79 77 61 79 20 2a eive it anyway *
bbe0: 2f 0a 20 09 54 63 6c 5f 54 68 72 65 61 64 41 6c /. .Tcl_ThreadAl
bbf0: 65 72 74 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 ert(infoPtr->thr
bc00: 65 61 64 49 64 29 3b 0a 2b 09 7d 0a 20 09 54 63 eadId);.+.}. .Tc
bc10: 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 70 l_MutexUnlock(&p
bc20: 69 70 65 4d 75 74 65 78 29 3b 0a 20 20 20 20 20 ipeMutex);.
bc30: 7d 0a 20 0a 40 40 20 2d 33 30 31 39 2c 31 30 20 }. .@@ -3019,10
bc40: 2b 33 30 32 38 2c 36 30 20 40 40 0a 20 09 20 2a +3028,60 @@. . *
bc50: 2f 0a 20 0a 20 09 54 63 6c 5f 4d 75 74 65 78 4c /. . .Tcl_MutexL
bc60: 6f 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b ock(&pipeMutex);
bc70: 0a 2b 09 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e .+.if (infoPtr->
bc80: 74 68 72 65 61 64 49 64 20 21 3d 20 4e 55 4c 4c threadId != NULL
bc90: 29 20 7b 0a 2b 09 20 20 20 20 2f 2a 20 54 49 50 ) {.+. /* TIP
bca0: 20 23 32 31 38 2e 20 57 68 65 6e 20 69 6e 20 66 #218. When in f
bcb0: 6c 69 67 68 74 20 69 67 6e 6f 72 65 20 74 68 65 light ignore the
bcc0: 20 65 76 65 6e 74 2c 20 6e 6f 20 6f 6e 65 20 77 event, no one w
bcd0: 69 6c 6c 20 72 65 63 65 69 76 65 20 69 74 20 61 ill receive it a
bce0: 6e 79 77 61 79 20 2a 2f 0a 20 09 54 63 6c 5f 54 nyway */. .Tcl_T
bcf0: 68 72 65 61 64 41 6c 65 72 74 28 69 6e 66 6f 50 hreadAlert(infoP
bd00: 74 72 2d 3e 74 68 72 65 61 64 49 64 29 3b 0a 2b tr->threadId);.+
bd10: 09 7d 0a 20 09 54 63 6c 5f 4d 75 74 65 78 55 6e .}. .Tcl_MutexUn
bd20: 6c 6f 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 lock(&pipeMutex)
bd30: 3b 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 ;. }. .
bd40: 72 65 74 75 72 6e 20 30 3b 0a 20 7d 0a 20 0a 2b return 0;. }. .+
bd50: 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /*.+ *----------
bd60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bd70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bd80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bd90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a ------------.+ *
bda0: 0a 2b 20 2a 20 50 69 70 65 54 68 72 65 61 64 41 .+ * PipeThreadA
bdb0: 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 2b 20 2a ctionProc --.+ *
bdc0: 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f 72 20 72 .+ *.Insert or r
bdd0: 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 64 emove any thread
bde0: 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20 74 local refs to t
bdf0: 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2b 20 2a his channel..+ *
be00: 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 .+ * Results:.+
be10: 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 *.None..+ *.+ *
be20: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 Side effects:.+
be30: 2a 09 43 68 61 6e 67 65 73 20 74 68 72 65 61 64 *.Changes thread
be40: 20 6c 6f 63 61 6c 20 6c 69 73 74 20 6f 66 20 76 local list of v
be50: 61 6c 69 64 20 63 68 61 6e 6e 65 6c 73 2e 0a 2b alid channels..+
be60: 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.+ *----------
be70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
be80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
be90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a ------------.+ *
beb0: 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 /.+.+static void
bec0: 0a 2b 50 69 70 65 54 68 72 65 61 64 41 63 74 69 .+PipeThreadActi
bed0: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65 onProc (instance
bee0: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20 Data, action).+
bef0: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 ClientData i
bf00: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 nstanceData;.+
bf10: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 2b int action;.+
bf20: 7b 0a 2b 20 20 20 20 50 69 70 65 49 6e 66 6f 20 {.+ PipeInfo
bf30: 2a 69 6e 66 6f 50 74 72 20 3d 20 28 50 69 70 65 *infoPtr = (Pipe
bf40: 49 6e 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65 Info *) instance
bf50: 44 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20 Data;.+.+ /*
bf60: 57 65 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73 We do not access
bf70: 20 66 69 72 73 74 50 69 70 65 50 74 72 20 69 6e firstPipePtr in
bf80: 20 74 68 65 20 74 68 72 65 61 64 20 73 74 72 75 the thread stru
bf90: 63 74 75 72 65 73 2e 20 54 68 69 73 20 69 73 0a ctures. This is.
bfa0: 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 6f 72 20 + * not for
bfb0: 61 6c 6c 20 70 69 70 65 73 20 6d 61 6e 61 67 65 all pipes manage
bfc0: 64 20 62 79 20 74 68 65 20 74 68 72 65 61 64 2c d by the thread,
bfd0: 20 62 75 74 20 6f 6e 6c 79 20 74 68 6f 73 65 20 but only those
bfe0: 77 65 20 61 72 65 0a 2b 20 20 20 20 20 2a 20 77 we are.+ * w
bff0: 61 74 63 68 69 6e 67 2e 20 52 65 6d 6f 76 61 6c atching. Removal
c000: 20 6f 66 20 74 68 65 20 66 69 6c 65 76 65 6e 74 of the filevent
c010: 20 68 61 6e 64 6c 65 72 73 20 62 65 66 6f 72 65 handlers before
c020: 20 74 72 61 6e 73 66 65 72 20 74 68 75 73 0a 2b transfer thus.+
c030: 20 20 20 20 20 2a 20 74 61 6b 65 73 20 63 61 72 * takes car
c040: 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 e of this struct
c050: 75 72 65 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a ure..+ */.+.
c060: 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 4c 6f + Tcl_MutexLo
c070: 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b 0a ck(&pipeMutex);.
c080: 2b 20 20 20 20 69 66 20 28 61 63 74 69 6f 6e 20 + if (action
c090: 3d 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 == TCL_CHANNEL_T
c0a0: 48 52 45 41 44 5f 49 4e 53 45 52 54 29 20 7b 0a HREAD_INSERT) {.
c0b0: 2b 20 20 20 20 20 20 20 20 2f 2a 20 57 65 20 63 + /* We c
c0c0: 61 6e 27 74 20 63 6f 70 79 20 74 68 65 20 74 68 an't copy the th
c0d0: 72 65 61 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e read information
c0e0: 20 66 72 6f 6d 20 74 68 65 20 63 68 61 6e 6e 65 from the channe
c0f0: 6c 20 77 68 65 6e 0a 2b 09 20 2a 20 74 68 65 20 l when.+. * the
c100: 63 68 61 6e 6e 65 6c 20 69 73 20 63 72 65 61 74 channel is creat
c110: 65 64 2e 20 41 74 20 74 68 69 73 20 74 69 6d 65 ed. At this time
c120: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 62 61 63 the channel bac
c130: 6b 0a 2b 09 20 2a 20 70 6f 69 6e 74 65 72 20 68 k.+. * pointer h
c140: 61 73 20 6e 6f 74 20 62 65 65 6e 20 73 65 74 20 as not been set
c150: 79 65 74 2e 20 48 6f 77 65 76 65 72 20 69 6e 20 yet. However in
c160: 74 68 61 74 20 63 61 73 65 20 74 68 65 0a 2b 09 that case the.+.
c170: 20 2a 20 74 68 72 65 61 64 49 64 20 68 61 73 20 * threadId has
c180: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 65 74 already been set
c190: 20 62 79 20 54 63 6c 70 43 72 65 61 74 65 43 6f by TclpCreateCo
c1a0: 6d 6d 61 6e 64 43 68 61 6e 6e 65 6c 0a 2b 09 20 mmandChannel.+.
c1b0: 2a 20 69 74 73 65 6c 66 2c 20 73 6f 20 74 68 65 * itself, so the
c1c0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 structure is st
c1d0: 69 6c 6c 20 67 6f 6f 64 2e 0a 2b 09 20 2a 2f 0a ill good..+. */.
c1e0: 2b 0a 2b 20 20 20 20 20 20 20 20 50 69 70 65 49 +.+ PipeI
c1f0: 6e 69 74 20 28 29 3b 0a 2b 20 20 20 20 20 20 20 nit ();.+
c200: 20 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e 63 68 if (infoPtr->ch
c210: 61 6e 6e 65 6c 20 21 3d 20 4e 55 4c 4c 29 20 7b annel != NULL) {
c220: 0a 2b 09 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e .+. infoPtr->
c230: 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f 47 threadId = Tcl_G
c240: 65 74 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 20 etChannelThread
c250: 28 69 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 (infoPtr->channe
c260: 6c 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 20 65 l);.+.}.+ } e
c270: 6c 73 65 20 7b 0a 2b 09 69 6e 66 6f 50 74 72 2d lse {.+.infoPtr-
c280: 3e 74 68 72 65 61 64 49 64 20 3d 20 4e 55 4c 4c >threadId = NULL
c290: 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 63 ;.+ }.+ Tc
c2a0: 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 70 l_MutexUnlock(&p
c2b0: 69 70 65 4d 75 74 65 78 29 3b 0a 2b 7d 0a 49 6e ipeMutex);.+}.In
c2c0: 64 65 78 3a 20 77 69 6e 2f 74 63 6c 57 69 6e 53 dex: win/tclWinS
c2d0: 65 72 69 61 6c 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d erial.c.========
c2e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c2f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
c310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
c320: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
c330: 63 6c 2f 74 63 6c 2f 77 69 6e 2f 74 63 6c 57 69 cl/tcl/win/tclWi
c340: 6e 53 65 72 69 61 6c 2e 63 2c 76 0a 72 65 74 72 nSerial.c,v.retr
c350: 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 ieving revision
c360: 31 2e 32 35 2e 32 2e 31 0a 64 69 66 66 20 2d 77 1.25.2.1.diff -w
c370: 20 2d 75 20 2d 72 31 2e 32 35 2e 32 2e 31 20 74 -u -r1.25.2.1 t
c380: 63 6c 57 69 6e 53 65 72 69 61 6c 2e 63 0a 2d 2d clWinSerial.c.--
c390: 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 53 65 72 69 - win/tclWinSeri
c3a0: 61 6c 2e 63 09 31 31 20 4d 61 79 20 32 30 30 33 al.c.11 May 2003
c3b0: 20 30 30 3a 33 31 3a 34 31 20 2d 30 30 30 30 09 00:31:41 -0000.
c3c0: 31 2e 32 35 2e 32 2e 31 0a 2b 2b 2b 20 77 69 6e 1.25.2.1.+++ win
c3d0: 2f 74 63 6c 57 69 6e 53 65 72 69 61 6c 2e 63 09 /tclWinSerial.c.
c3e0: 32 37 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 27 Jan 2005 22:4
c3f0: 39 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 31 9:19 -0000.@@ -1
c400: 39 30 2c 36 20 2b 31 39 30 2c 39 20 40 40 0a 20 90,6 +190,9 @@.
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c420: 43 4f 4e 53 54 20 63 68 61 72 20 2a 76 61 6c 75 CONST char *valu
c430: 65 29 29 3b 0a 20 73 74 61 74 69 63 20 44 57 4f e));. static DWO
c440: 52 44 20 57 49 4e 41 50 49 20 20 20 20 20 53 65 RD WINAPI Se
c450: 72 69 61 6c 57 72 69 74 65 72 54 68 72 65 61 64 rialWriterThread
c460: 28 4c 50 56 4f 49 44 20 61 72 67 29 3b 0a 20 0a (LPVOID arg);. .
c470: 2b 73 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 +static void
c480: 20 20 20 20 20 20 20 20 20 53 65 72 69 61 6c 54 SerialT
c490: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 hreadActionProc
c4a0: 5f 41 4e 53 49 5f 41 52 47 53 5f 20 28 28 0a 2b _ANSI_ARGS_ ((.+
c4b0: 09 09 09 20 20 20 43 6c 69 65 6e 74 44 61 74 61 ... ClientData
c4c0: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 69 instanceData, i
c4d0: 6e 74 20 61 63 74 69 6f 6e 29 29 3b 0a 2b 0a 20 nt action));.+.
c4e0: 2f 2a 0a 20 20 2a 20 54 68 69 73 20 73 74 72 75 /*. * This stru
c4f0: 63 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 cture describes
c500: 74 68 65 20 63 68 61 6e 6e 65 6c 20 74 79 70 65 the channel type
c510: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 63 structure for c
c520: 6f 6d 6d 61 6e 64 20 73 65 72 69 61 6c 0a 20 20 ommand serial.
c530: 2a 20 62 61 73 65 64 20 49 4f 2e 0a 40 40 20 2d * based IO..@@ -
c540: 31 39 37 2c 37 20 2b 32 30 30 2c 37 20 40 40 0a 197,7 +200,7 @@.
c550: 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 43 68 . static Tcl_Ch
c560: 61 6e 6e 65 6c 54 79 70 65 20 73 65 72 69 61 6c annelType serial
c570: 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a ChannelType = {.
c580: 20 20 20 20 20 22 73 65 72 69 61 6c 22 2c 20 20 "serial",
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c5a0: 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a /* Type name. *
c5b0: 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e /.- TCL_CHANN
c5c0: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 20 20 20 EL_VERSION_2,
c5d0: 20 20 20 2f 2a 20 76 32 20 63 68 61 6e 6e 65 6c /* v2 channel
c5e0: 20 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 48 41 */.+ TCL_CHA
c5f0: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c 20 NNEL_VERSION_4,
c600: 20 20 20 20 20 2f 2a 20 76 34 20 63 68 61 6e 6e /* v4 chann
c610: 65 6c 20 2a 2f 0a 20 20 20 20 20 53 65 72 69 61 el */. Seria
c620: 6c 43 6c 6f 73 65 50 72 6f 63 2c 20 20 20 20 20 lCloseProc,
c630: 20 20 20 20 20 20 20 2f 2a 20 43 6c 6f 73 65 20 /* Close
c640: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 53 65 proc. */. Se
c650: 72 69 61 6c 49 6e 70 75 74 50 72 6f 63 2c 20 20 rialInputProc,
c660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 70 /* Inp
c670: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 ut proc. */.
c680: 20 53 65 72 69 61 6c 4f 75 74 70 75 74 50 72 6f SerialOutputPro
c690: 63 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 c, /*
c6a0: 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a Output proc. */.
c6b0: 40 40 20 2d 32 31 30 2c 36 20 2b 32 31 33 2c 38 @@ -210,6 +213,8
c6c0: 20 40 40 0a 20 20 20 20 20 53 65 72 69 61 6c 42 @@. SerialB
c6d0: 6c 6f 63 6b 50 72 6f 63 2c 20 20 20 20 20 20 20 lockProc,
c6e0: 20 20 20 20 20 2f 2a 20 53 65 74 20 62 6c 6f 63 /* Set bloc
c6f0: 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 king or non-bloc
c700: 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 king mode.*/.
c710: 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 NULL,
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a /*
c730: 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a flush proc. */.
c740: 20 20 20 20 20 4e 55 4c 4c 2c 20 20 20 20 20 20 NULL,
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c760: 20 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 /* handler proc
c770: 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 . */.+ NULL,
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c790: 20 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73 65 /* wide se
c7a0: 65 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20 20 ek proc */.+
c7b0: 53 65 72 69 61 6c 54 68 72 65 61 64 41 63 74 69 SerialThreadActi
c7c0: 6f 6e 50 72 6f 63 2c 20 20 20 20 20 2f 2a 20 74 onProc, /* t
c7d0: 68 72 65 61 64 20 61 63 74 69 6f 6e 20 70 72 6f hread action pro
c7e0: 63 20 2a 2f 0a 20 7d 3b 0a 20 0a 20 2f 2a 0a 40 c */. };. . /*.@
c7f0: 40 20 2d 31 33 34 36 2c 37 20 2b 31 33 35 31 2c @ -1346,7 +1351,
c800: 31 30 20 40 40 0a 20 20 20 20 20 20 20 20 20 20 10 @@.
c810: 2a 2f 0a 20 0a 20 20 20 20 20 20 20 20 20 54 63 */. . Tc
c820: 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 73 65 72 l_MutexLock(&ser
c830: 69 61 6c 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20 ialMutex);.+.if
c840: 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 (infoPtr->thread
c850: 49 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 Id != NULL) {.+.
c860: 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e /* TIP #218.
c870: 20 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20 When in flight
c880: 69 67 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74 ignore the event
c890: 2c 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65 , no one will re
c8a0: 63 65 69 76 65 20 69 74 20 61 6e 79 77 61 79 20 ceive it anyway
c8b0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 54 63 6c 5f */. Tcl_
c8c0: 54 68 72 65 61 64 41 6c 65 72 74 28 69 6e 66 6f ThreadAlert(info
c8d0: 50 74 72 2d 3e 74 68 72 65 61 64 49 64 29 3b 0a Ptr->threadId);.
c8e0: 2b 09 7d 0a 20 20 20 20 20 20 20 20 20 54 63 6c +.}. Tcl
c8f0: 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 73 65 _MutexUnlock(&se
c900: 72 69 61 6c 4d 75 74 65 78 29 3b 0a 20 20 20 20 rialMutex);.
c910: 20 7d 0a 20 0a 40 40 20 2d 31 34 31 39 2c 31 36 }. .@@ -1419,16
c920: 20 2b 31 34 32 37 2c 32 35 20 40 40 0a 20 20 20 +1427,25 @@.
c930: 20 20 69 6e 74 20 70 65 72 6d 69 73 73 69 6f 6e int permission
c940: 73 3b 0a 20 7b 0a 20 20 20 20 20 53 65 72 69 61 s;. {. Seria
c950: 6c 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 3b 0a lInfo *infoPtr;.
c960: 2d 20 20 20 20 54 68 72 65 61 64 53 70 65 63 69 - ThreadSpeci
c970: 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 72 3b ficData *tsdPtr;
c980: 0a 20 20 20 20 20 44 57 4f 52 44 20 69 64 3b 0a . DWORD id;.
c990: 20 0a 2d 20 20 20 20 74 73 64 50 74 72 20 3d 20 .- tsdPtr =
c9a0: 53 65 72 69 61 6c 49 6e 69 74 28 29 3b 0a 2b 20 SerialInit();.+
c9b0: 20 20 20 53 65 72 69 61 6c 49 6e 69 74 28 29 3b SerialInit();
c9c0: 0a 20 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 20 . . infoPtr
c9d0: 3d 20 28 53 65 72 69 61 6c 49 6e 66 6f 20 2a 29 = (SerialInfo *)
c9e0: 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 67 6e ckalloc((unsign
c9f0: 65 64 29 20 73 69 7a 65 6f 66 28 53 65 72 69 61 ed) sizeof(Seria
ca00: 6c 49 6e 66 6f 29 29 3b 0a 20 20 20 20 20 6d 65 lInfo));. me
ca10: 6d 73 65 74 28 69 6e 66 6f 50 74 72 2c 20 30 2c mset(infoPtr, 0,
ca20: 20 73 69 7a 65 6f 66 28 53 65 72 69 61 6c 49 6e sizeof(SerialIn
ca30: 66 6f 29 29 3b 0a 20 0a 20 20 20 20 20 69 6e 66 fo));. . inf
ca40: 6f 50 74 72 2d 3e 76 61 6c 69 64 4d 61 73 6b 20 oPtr->validMask
ca50: 3d 20 70 65 72 6d 69 73 73 69 6f 6e 73 3b 0a 20 = permissions;.
ca60: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 68 61 6e infoPtr->han
ca70: 64 6c 65 20 3d 20 68 61 6e 64 6c 65 3b 0a 2b 20 dle = handle;.+
ca80: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 63 68 61 6e infoPtr->chan
ca90: 6e 65 6c 20 20 20 20 20 20 20 3d 20 28 54 63 6c nel = (Tcl
caa0: 5f 43 68 61 6e 6e 65 6c 29 20 4e 55 4c 4c 3b 0a _Channel) NULL;.
cab0: 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 72 65 + infoPtr->re
cac0: 61 64 61 62 6c 65 20 20 20 20 20 20 3d 20 30 3b adable = 0;
cad0: 20 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e .+ infoPtr->
cae0: 77 72 69 74 61 62 6c 65 20 20 20 20 20 20 3d 20 writable =
caf0: 31 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 1;.+ infoPtr-
cb00: 3e 74 6f 57 72 69 74 65 20 20 20 20 20 20 20 3d >toWrite =
cb10: 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 65 51 infoPtr->writeQ
cb20: 75 65 75 65 20 3d 20 30 3b 0a 2b 20 20 20 20 69 ueue = 0;.+ i
cb30: 6e 66 6f 50 74 72 2d 3e 62 6c 6f 63 6b 54 69 6d nfoPtr->blockTim
cb40: 65 20 20 20 20 20 3d 20 53 45 52 49 41 4c 5f 44 e = SERIAL_D
cb50: 45 46 41 55 4c 54 5f 42 4c 4f 43 4b 54 49 4d 45 EFAULT_BLOCKTIME
cb60: 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e ;.+ infoPtr->
cb70: 6c 61 73 74 45 76 65 6e 74 54 69 6d 65 20 3d 20 lastEventTime =
cb80: 30 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d 0;.+ infoPtr-
cb90: 3e 6c 61 73 74 45 72 72 6f 72 20 20 20 20 20 3d >lastError =
cba0: 20 69 6e 66 6f 50 74 72 2d 3e 65 72 72 6f 72 20 infoPtr->error
cbb0: 3d 20 30 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 = 0;.+ infoPt
cbc0: 72 2d 3e 74 68 72 65 61 64 49 64 20 20 20 20 20 r->threadId
cbd0: 20 3d 20 54 63 6c 5f 47 65 74 43 75 72 72 65 6e = Tcl_GetCurren
cbe0: 74 54 68 72 65 61 64 28 29 3b 0a 2b 20 20 20 20 tThread();.+
cbf0: 69 6e 66 6f 50 74 72 2d 3e 73 79 73 42 75 66 52 infoPtr->sysBufR
cc00: 65 61 64 20 20 20 20 3d 20 34 30 39 36 3b 0a 2b ead = 4096;.+
cc10: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 73 79 73 infoPtr->sys
cc20: 42 75 66 57 72 69 74 65 20 20 20 3d 20 34 30 39 BufWrite = 409
cc30: 36 3b 0a 20 0a 20 20 20 20 20 2f 2a 0a 20 20 20 6;. . /*.
cc40: 20 20 20 2a 20 55 73 65 20 74 68 65 20 70 6f 69 * Use the poi
cc50: 6e 74 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 nter to keep the
cc60: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 73 20 75 channel names u
cc70: 6e 69 71 75 65 2c 20 69 6e 20 63 61 73 65 0a 40 nique, in case.@
cc80: 40 20 2d 31 34 34 30 2c 31 34 20 2b 31 34 35 37 @ -1440,14 +1457
cc90: 2c 36 20 40 40 0a 20 20 20 20 20 69 6e 66 6f 50 ,6 @@. infoP
cca0: 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 3d 20 54 63 tr->channel = Tc
ccb0: 6c 5f 43 72 65 61 74 65 43 68 61 6e 6e 65 6c 28 l_CreateChannel(
ccc0: 26 73 65 72 69 61 6c 43 68 61 6e 6e 65 6c 54 79 &serialChannelTy
ccd0: 70 65 2c 20 63 68 61 6e 6e 65 6c 4e 61 6d 65 2c pe, channelName,
cce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 43 . (C
ccf0: 6c 69 65 6e 74 44 61 74 61 29 20 69 6e 66 6f 50 lientData) infoP
cd00: 74 72 2c 20 70 65 72 6d 69 73 73 69 6f 6e 73 29 tr, permissions)
cd10: 3b 0a 20 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 ;. .- infoPtr
cd20: 2d 3e 72 65 61 64 61 62 6c 65 20 3d 20 30 3b 20 ->readable = 0;
cd30: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 77 .- infoPtr->w
cd40: 72 69 74 61 62 6c 65 20 3d 20 31 3b 0a 2d 20 20 ritable = 1;.-
cd50: 20 20 69 6e 66 6f 50 74 72 2d 3e 74 6f 57 72 69 infoPtr->toWri
cd60: 74 65 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 77 72 te = infoPtr->wr
cd70: 69 74 65 51 75 65 75 65 20 3d 20 30 3b 0a 2d 20 iteQueue = 0;.-
cd80: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 62 6c 6f 63 infoPtr->bloc
cd90: 6b 54 69 6d 65 20 3d 20 53 45 52 49 41 4c 5f 44 kTime = SERIAL_D
cda0: 45 46 41 55 4c 54 5f 42 4c 4f 43 4b 54 49 4d 45 EFAULT_BLOCKTIME
cdb0: 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e ;.- infoPtr->
cdc0: 6c 61 73 74 45 76 65 6e 74 54 69 6d 65 20 3d 20 lastEventTime =
cdd0: 30 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 0;.- infoPtr-
cde0: 3e 6c 61 73 74 45 72 72 6f 72 20 3d 20 69 6e 66 >lastError = inf
cdf0: 6f 50 74 72 2d 3e 65 72 72 6f 72 20 3d 20 30 3b oPtr->error = 0;
ce00: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 74 .- infoPtr->t
ce10: 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f 47 65 hreadId = Tcl_Ge
ce20: 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 28 29 tCurrentThread()
ce30: 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e ;.- infoPtr->
ce40: 73 79 73 42 75 66 52 65 61 64 20 3d 20 69 6e 66 sysBufRead = inf
ce50: 6f 50 74 72 2d 3e 73 79 73 42 75 66 57 72 69 74 oPtr->sysBufWrit
ce60: 65 20 3d 20 34 30 39 36 3b 0a 20 0a 20 20 20 20 e = 4096;. .
ce70: 20 53 65 74 75 70 43 6f 6d 6d 28 68 61 6e 64 6c SetupComm(handl
ce80: 65 2c 20 69 6e 66 6f 50 74 72 2d 3e 73 79 73 42 e, infoPtr->sysB
ce90: 75 66 52 65 61 64 2c 20 69 6e 66 6f 50 74 72 2d ufRead, infoPtr-
cea0: 3e 73 79 73 42 75 66 57 72 69 74 65 29 3b 0a 20 >sysBufWrite);.
ceb0: 20 20 20 20 50 75 72 67 65 43 6f 6d 6d 28 68 61 PurgeComm(ha
cec0: 6e 64 6c 65 2c 20 50 55 52 47 45 5f 54 58 41 42 ndle, PURGE_TXAB
ced0: 4f 52 54 20 7c 20 50 55 52 47 45 5f 52 58 41 42 ORT | PURGE_RXAB
cee0: 4f 52 54 20 7c 20 50 55 52 47 45 5f 54 58 43 4c ORT | PURGE_TXCL
cef0: 45 41 52 20 0a 40 40 20 2d 32 31 30 37 2c 33 20 EAR .@@ -2107,3
cf00: 2b 32 31 31 36 2c 35 31 20 40 40 0a 20 20 20 20 +2116,51 @@.
cf10: 20 20 20 20 20 20 20 20 20 22 6d 6f 64 65 20 70 "mode p
cf20: 6f 6c 6c 69 6e 74 65 72 76 61 6c 20 6c 61 73 74 ollinterval last
cf30: 65 72 72 6f 72 20 71 75 65 75 65 20 73 79 73 62 error queue sysb
cf40: 75 66 66 65 72 20 74 74 79 73 74 61 74 75 73 20 uffer ttystatus
cf50: 78 63 68 61 72 22 29 3b 0a 20 20 20 20 20 7d 0a xchar");. }.
cf60: 20 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d }.+..+/*.+ *---
cf70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
cf80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
cf90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
cfa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
cfb0: 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 53 65 72 69 ---.+ *.+ * Seri
cfc0: 61 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 alThreadActionPr
cfd0: 6f 63 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e oc --.+ *.+ *.In
cfe0: 73 65 72 74 20 6f 72 20 72 65 6d 6f 76 65 20 61 sert or remove a
cff0: 6e 79 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 ny thread local
d000: 72 65 66 73 20 74 6f 20 74 68 69 73 20 63 68 61 refs to this cha
d010: 6e 6e 65 6c 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 nnel..+ *.+ * Re
d020: 73 75 6c 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e sults:.+ *.None.
d030: 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 .+ *.+ * Side ef
d040: 66 65 63 74 73 3a 0a 2b 20 2a 09 43 68 61 6e 67 fects:.+ *.Chang
d050: 65 73 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 es thread local
d060: 6c 69 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68 list of valid ch
d070: 61 6e 6e 65 6c 73 2e 0a 2b 20 2a 0a 2b 20 2a 2d annels..+ *.+ *-
d080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
d090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
d0a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
d0b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
d0c0: 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 -----.+ */.+.+st
d0d0: 61 74 69 63 20 76 6f 69 64 0a 2b 53 65 72 69 61 atic void.+Seria
d0e0: 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f lThreadActionPro
d0f0: 63 20 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c c (instanceData,
d100: 20 61 63 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43 action).+ C
d110: 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e lientData instan
d120: 63 65 44 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e ceData;.+ in
d130: 74 20 61 63 74 69 6f 6e 3b 0a 2b 7b 0a 2b 20 20 t action;.+{.+
d140: 20 20 53 65 72 69 61 6c 49 6e 66 6f 20 2a 69 6e SerialInfo *in
d150: 66 6f 50 74 72 20 3d 20 28 53 65 72 69 61 6c 49 foPtr = (SerialI
d160: 6e 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 nfo *) instanceD
d170: 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20 57 ata;.+.+ /* W
d180: 65 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73 20 e do not access
d190: 66 69 72 73 74 53 65 72 69 61 6c 50 74 72 20 69 firstSerialPtr i
d1a0: 6e 20 74 68 65 20 74 68 72 65 61 64 20 73 74 72 n the thread str
d1b0: 75 63 74 75 72 65 73 2e 20 54 68 69 73 20 69 73 uctures. This is
d1c0: 0a 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 6f 72 .+ * not for
d1d0: 20 61 6c 6c 20 73 65 72 69 61 6c 73 20 6d 61 6e all serials man
d1e0: 61 67 65 64 20 62 79 20 74 68 65 20 74 68 72 65 aged by the thre
d1f0: 61 64 2c 20 62 75 74 20 6f 6e 6c 79 20 74 68 6f ad, but only tho
d200: 73 65 20 77 65 20 61 72 65 0a 2b 20 20 20 20 20 se we are.+
d210: 2a 20 77 61 74 63 68 69 6e 67 2e 20 52 65 6d 6f * watching. Remo
d220: 76 61 6c 20 6f 66 20 74 68 65 20 66 69 6c 65 76 val of the filev
d230: 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 62 65 66 ent handlers bef
d240: 6f 72 65 20 74 72 61 6e 73 66 65 72 20 74 68 75 ore transfer thu
d250: 73 0a 2b 20 20 20 20 20 2a 20 74 61 6b 65 73 20 s.+ * takes
d260: 63 61 72 65 20 6f 66 20 74 68 69 73 20 73 74 72 care of this str
d270: 75 63 74 75 72 65 2e 0a 2b 20 20 20 20 20 2a 2f ucture..+ */
d280: 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 .+.+ Tcl_Mute
d290: 78 4c 6f 63 6b 28 26 73 65 72 69 61 6c 4d 75 74 xLock(&serialMut
d2a0: 65 78 29 3b 0a 2b 20 20 20 20 69 66 20 28 61 63 ex);.+ if (ac
d2b0: 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 4e tion == TCL_CHAN
d2c0: 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 52 NEL_THREAD_INSER
d2d0: 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f 2a T) {.+ /*
d2e0: 20 57 65 20 63 61 6e 27 74 20 63 6f 70 79 20 74 We can't copy t
d2f0: 68 65 20 74 68 72 65 61 64 20 69 6e 66 6f 72 6d he thread inform
d300: 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 63 ation from the c
d310: 68 61 6e 6e 65 6c 20 77 68 65 6e 0a 2b 09 20 2a hannel when.+. *
d320: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 69 73 20 the channel is
d330: 63 72 65 61 74 65 64 2e 20 41 74 20 74 68 69 73 created. At this
d340: 20 74 69 6d 65 20 74 68 65 20 63 68 61 6e 6e 65 time the channe
d350: 6c 20 62 61 63 6b 0a 2b 09 20 2a 20 70 6f 69 6e l back.+. * poin
d360: 74 65 72 20 68 61 73 20 6e 6f 74 20 62 65 65 6e ter has not been
d370: 20 73 65 74 20 79 65 74 2e 20 48 6f 77 65 76 65 set yet. Howeve
d380: 72 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 74 r in that case t
d390: 68 65 0a 2b 09 20 2a 20 74 68 72 65 61 64 49 64 he.+. * threadId
d3a0: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee
d3b0: 6e 20 73 65 74 20 62 79 20 54 63 6c 70 43 72 65 n set by TclpCre
d3c0: 61 74 65 43 6f 6d 6d 61 6e 64 43 68 61 6e 6e 65 ateCommandChanne
d3d0: 6c 0a 2b 09 20 2a 20 69 74 73 65 6c 66 2c 20 73 l.+. * itself, s
d3e0: 6f 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20 o the structure
d3f0: 69 73 20 73 74 69 6c 6c 20 67 6f 6f 64 2e 0a 2b is still good..+
d400: 09 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 20 20 20 . */.+.+
d410: 53 65 72 69 61 6c 49 6e 69 74 20 28 29 3b 0a 2b SerialInit ();.+
d420: 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 66 6f if (info
d430: 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 21 3d 20 Ptr->channel !=
d440: 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 69 6e NULL) {.+. in
d450: 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20 foPtr->threadId
d460: 3d 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c = Tcl_GetChannel
d470: 54 68 72 65 61 64 20 28 69 6e 66 6f 50 74 72 2d Thread (infoPtr-
d480: 3e 63 68 61 6e 6e 65 6c 29 3b 0a 2b 09 7d 0a 2b >channel);.+.}.+
d490: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 69 } else {.+.i
d4a0: 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 nfoPtr->threadId
d4b0: 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 7d 0a = NULL;.+ }.
d4c0: 2b 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 55 6e + Tcl_MutexUn
d4d0: 6c 6f 63 6b 28 26 73 65 72 69 61 6c 4d 75 74 65 lock(&serialMute
d4e0: 78 29 3b 0a 2b 7d 0a 49 6e 64 65 78 3a 20 77 69 x);.+}.Index: wi
d4f0: 6e 2f 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 0a 3d n/tclWinSock.c.=
d500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d510: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d520: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d530: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
d540: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 ==.RCS file: /cv
d550: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 sroot/tcl/tcl/wi
d560: 6e 2f 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 2c 76 n/tclWinSock.c,v
d570: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 .retrieving revi
d580: 73 69 6f 6e 20 31 2e 33 36 2e 32 2e 32 0a 64 69 sion 1.36.2.2.di
d590: 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 33 36 2e ff -w -u -r1.36.
d5a0: 32 2e 32 20 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 2.2 tclWinSock.c
d5b0: 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 53 .--- win/tclWinS
d5c0: 6f 63 6b 2e 63 09 36 20 4d 61 79 20 32 30 30 34 ock.c.6 May 2004
d5d0: 20 30 31 3a 30 33 3a 35 36 20 2d 30 30 30 30 09 01:03:56 -0000.
d5e0: 31 2e 33 36 2e 32 2e 32 0a 2b 2b 2b 20 77 69 6e 1.36.2.2.+++ win
d5f0: 2f 74 63 6c 57 69 6e 53 6f 63 6b 2e 63 09 32 37 /tclWinSock.c.27
d600: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 34 39 3a Jan 2005 22:49:
d610: 31 39 20 2d 30 30 30 30 0a 40 40 20 2d 32 36 35 19 -0000.@@ -265
d620: 2c 36 20 2b 32 36 35 2c 31 30 20 40 40 0a 20 09 ,6 +265,10 @@. .
d630: 09 09 09 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 ...int *errorCod
d640: 65 50 74 72 29 29 3b 0a 20 73 74 61 74 69 63 20 ePtr));. static
d650: 44 57 4f 52 44 20 57 49 4e 41 50 49 09 20 20 20 DWORD WINAPI.
d660: 20 53 6f 63 6b 65 74 54 68 72 65 61 64 20 5f 41 SocketThread _A
d670: 4e 53 49 5f 41 52 47 53 5f 28 28 4c 50 56 4f 49 NSI_ARGS_((LPVOI
d680: 44 20 61 72 67 29 29 3b 0a 20 0a 2b 73 74 61 74 D arg));. .+stat
d690: 69 63 20 76 6f 69 64 20 20 20 20 20 20 20 20 20 ic void
d6a0: 20 20 20 20 54 63 70 54 68 72 65 61 64 41 63 74 TcpThreadAct
d6b0: 69 6f 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 ionProc _ANSI_AR
d6c0: 47 53 5f 20 28 28 0a 2b 09 09 09 20 20 20 43 6c GS_ ((.+... Cl
d6d0: 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 ientData instanc
d6e0: 65 44 61 74 61 2c 20 69 6e 74 20 61 63 74 69 6f eData, int actio
d6f0: 6e 29 29 3b 0a 2b 0a 2b 0a 20 2f 2a 0a 20 20 2a n));.+.+. /*. *
d700: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 This structure
d710: 64 65 73 63 72 69 62 65 73 20 74 68 65 20 63 68 describes the ch
d720: 61 6e 6e 65 6c 20 74 79 70 65 20 73 74 72 75 63 annel type struc
d730: 74 75 72 65 20 66 6f 72 20 54 43 50 20 73 6f 63 ture for TCP soc
d740: 6b 65 74 0a 20 20 2a 20 62 61 73 65 64 20 49 4f ket. * based IO
d750: 2e 0a 40 40 20 2d 32 37 32 2c 37 20 2b 32 37 36 ..@@ -272,7 +276
d760: 2c 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20 ,7 @@. . static
d770: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 Tcl_ChannelType
d780: 74 63 70 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d tcpChannelType =
d790: 20 7b 0a 20 20 20 20 20 22 74 63 70 22 2c 09 09 {. "tcp",..
d7a0: 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 /* Type name
d7b0: 2e 20 2a 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 . */.- TCL_CH
d7c0: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c ANNEL_VERSION_2,
d7d0: 20 20 2f 2a 20 76 32 20 63 68 61 6e 6e 65 6c 20 /* v2 channel
d7e0: 2a 2f 0a 2b 20 20 20 20 54 43 4c 5f 43 48 41 4e */.+ TCL_CHAN
d7f0: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c 20 20 NEL_VERSION_4,
d800: 2f 2a 20 76 34 20 63 68 61 6e 6e 65 6c 20 2a 2f /* v4 channel */
d810: 0a 20 20 20 20 20 54 63 70 43 6c 6f 73 65 50 72 . TcpClosePr
d820: 6f 63 2c 09 20 20 20 20 2f 2a 20 43 6c 6f 73 65 oc,. /* Close
d830: 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 54 proc. */. T
d840: 63 70 49 6e 70 75 74 50 72 6f 63 2c 09 20 20 20 cpInputProc,.
d850: 20 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 /* Input proc.
d860: 2a 2f 0a 20 20 20 20 20 54 63 70 4f 75 74 70 75 */. TcpOutpu
d870: 74 50 72 6f 63 2c 09 20 20 20 20 2f 2a 20 4f 75 tProc,. /* Ou
d880: 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 tput proc. */.@@
d890: 20 2d 32 38 35 2c 36 20 2b 32 38 39 2c 38 20 40 -285,6 +289,8 @
d8a0: 40 0a 20 20 20 20 20 54 63 70 42 6c 6f 63 6b 50 @. TcpBlockP
d8b0: 72 6f 63 2c 09 20 20 20 20 2f 2a 20 53 65 74 20 roc,. /* Set
d8c0: 73 6f 63 6b 65 74 20 69 6e 74 6f 20 28 6e 6f 6e socket into (non
d8d0: 2d 29 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e -)blocking mode.
d8e0: 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 */. NULL,..
d8f0: 20 20 20 20 2f 2a 20 66 6c 75 73 68 20 70 72 6f /* flush pro
d900: 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c c. */. NULL,
d910: 09 09 20 20 20 20 2f 2a 20 68 61 6e 64 6c 65 72 .. /* handler
d920: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e proc. */.+ N
d930: 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20 ULL,
d940: 20 20 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73 /* wide s
d950: 65 65 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20 eek proc */.+
d960: 20 54 63 70 54 68 72 65 61 64 41 63 74 69 6f 6e TcpThreadAction
d970: 50 72 6f 63 2c 20 20 20 20 2f 2a 20 74 68 72 65 Proc, /* thre
d980: 61 64 20 61 63 74 69 6f 6e 20 70 72 6f 63 20 2a ad action proc *
d990: 2f 0a 20 7d 3b 0a 20 0a 20 0c 0a 40 40 20 2d 39 /. };. . ..@@ -9
d9a0: 37 30 2c 37 20 2b 39 37 36 2c 37 20 40 40 0a 20 70,7 +976,7 @@.
d9b0: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a Tcl_Interp *
d9c0: 69 6e 74 65 72 70 3b 09 09 2f 2a 20 55 6e 75 73 interp;../* Unus
d9d0: 65 64 2e 20 2a 2f 0a 20 7b 0a 20 20 20 20 20 53 ed. */. {. S
d9e0: 6f 63 6b 65 74 49 6e 66 6f 20 2a 69 6e 66 6f 50 ocketInfo *infoP
d9f0: 74 72 20 3d 20 28 53 6f 63 6b 65 74 49 6e 66 6f tr = (SocketInfo
da00: 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 74 61 *) instanceData
da10: 3b 0a 2d 20 20 20 20 53 6f 63 6b 65 74 49 6e 66 ;.- SocketInf
da20: 6f 20 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a o **nextPtrPtr;.
da30: 2b 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 + /* TIP #218
da40: 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 65 72 72 */. int err
da50: 6f 72 43 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20 orCode = 0;.
da60: 20 54 68 72 65 61 64 53 70 65 63 69 66 69 63 44 ThreadSpecificD
da70: 61 74 61 20 2a 74 73 64 50 74 72 20 3d 20 54 43 ata *tsdPtr = TC
da80: 4c 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 L_TSD_INIT(&data
da90: 4b 65 79 29 3b 0a 20 0a 40 40 20 2d 39 39 35 2c Key);. .@@ -995,
daa0: 32 30 20 2b 31 30 30 31 2c 31 32 20 40 40 0a 20 20 +1001,12 @@.
dab0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 7d }. }
dac0: 0a 20 0a 2d 20 20 20 20 2f 2a 0a 2d 20 20 20 20 . .- /*.-
dad0: 20 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 73 6f * Remove the so
dae0: 63 6b 65 74 20 66 72 6f 6d 20 73 6f 63 6b 65 74 cket from socket
daf0: 4c 69 73 74 2e 0a 2b 20 20 20 20 2f 2a 20 54 49 List..+ /* TI
db00: 50 20 23 32 31 38 2e 20 52 65 6d 6f 76 65 64 20 P #218. Removed
db10: 74 68 65 20 63 6f 64 65 20 72 65 6d 6f 76 69 6e the code removin
db20: 67 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a g the structure.
db30: 2b 20 20 20 20 20 2a 20 66 72 6f 6d 20 74 68 65 + * from the
db40: 20 67 6c 6f 62 61 6c 20 73 6f 63 6b 65 74 20 6c global socket l
db50: 69 73 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 ist. This is now
db60: 20 64 6f 6e 65 20 62 79 0a 2b 20 20 20 20 20 2a done by.+ *
db70: 20 74 68 65 20 74 68 72 65 61 64 20 61 63 74 69 the thread acti
db80: 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e on callbacks, an
db90: 64 20 6f 6e 6c 79 20 74 68 65 72 65 2e 20 54 68 d only there. Th
dba0: 69 73 0a 2b 20 20 20 20 20 2a 20 68 61 70 70 65 is.+ * happe
dbb0: 6e 73 20 62 65 66 6f 72 65 20 74 68 69 73 20 63 ns before this c
dbc0: 6f 64 65 20 69 73 20 63 61 6c 6c 65 64 2e 20 57 ode is called. W
dbd0: 65 20 63 61 6e 20 66 72 65 65 0a 2b 20 20 20 20 e can free.+
dbe0: 20 2a 20 77 69 74 68 6f 75 74 20 66 65 61 72 20 * without fear
dbf0: 6f 66 20 64 61 6d 61 6e 67 69 6e 67 20 74 68 65 of damanging the
dc00: 20 6c 69 73 74 2e 0a 20 20 20 20 20 20 2a 2f 0a list.. */.
dc10: 2d 0a 2d 20 20 20 20 57 61 69 74 46 6f 72 53 69 -.- WaitForSi
dc20: 6e 67 6c 65 4f 62 6a 65 63 74 28 74 73 64 50 74 ngleObject(tsdPt
dc30: 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63 r->socketListLoc
dc40: 6b 2c 20 49 4e 46 49 4e 49 54 45 29 3b 0a 2d 20 k, INFINITE);.-
dc50: 20 20 20 66 6f 72 20 28 6e 65 78 74 50 74 72 50 for (nextPtrP
dc60: 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d 3e 73 tr = &(tsdPtr->s
dc70: 6f 63 6b 65 74 4c 69 73 74 29 3b 20 28 2a 6e 65 ocketList); (*ne
dc80: 78 74 50 74 72 50 74 72 29 20 21 3d 20 4e 55 4c xtPtrPtr) != NUL
dc90: 4c 3b 0a 2d 09 20 6e 65 78 74 50 74 72 50 74 72 L;.-. nextPtrPtr
dca0: 20 3d 20 26 28 28 2a 6e 65 78 74 50 74 72 50 74 = &((*nextPtrPt
dcb0: 72 29 2d 3e 6e 65 78 74 50 74 72 29 29 20 7b 0a r)->nextPtr)) {.
dcc0: 2d 09 69 66 20 28 28 2a 6e 65 78 74 50 74 72 50 -.if ((*nextPtrP
dcd0: 74 72 29 20 3d 3d 20 69 6e 66 6f 50 74 72 29 20 tr) == infoPtr)
dce0: 7b 0a 2d 09 20 20 20 20 28 2a 6e 65 78 74 50 74 {.-. (*nextPt
dcf0: 72 50 74 72 29 20 3d 20 69 6e 66 6f 50 74 72 2d rPtr) = infoPtr-
dd00: 3e 6e 65 78 74 50 74 72 3b 0a 2d 09 20 20 20 20 >nextPtr;.-.
dd10: 62 72 65 61 6b 3b 0a 2d 09 7d 0a 2d 20 20 20 20 break;.-.}.-
dd20: 7d 0a 2d 20 20 20 20 0a 2d 20 20 20 20 53 65 74 }.- .- Set
dd30: 45 76 65 6e 74 28 74 73 64 50 74 72 2d 3e 73 6f Event(tsdPtr->so
dd40: 63 6b 65 74 4c 69 73 74 4c 6f 63 6b 29 3b 0a 20 cketListLock);.
dd50: 20 20 20 20 63 6b 66 72 65 65 28 28 63 68 61 72 ckfree((char
dd60: 20 2a 29 20 69 6e 66 6f 50 74 72 29 3b 0a 20 20 *) infoPtr);.
dd70: 20 20 20 72 65 74 75 72 6e 20 65 72 72 6f 72 43 return errorC
dd80: 6f 64 65 3b 0a 20 7d 0a 40 40 20 2d 31 30 32 35 ode;. }.@@ -1025
dd90: 2c 37 20 2b 31 30 32 33 2c 37 20 40 40 0a 20 20 ,7 +1023,7 @@.
dda0: 2a 09 52 65 74 75 72 6e 73 20 61 20 6e 65 77 6c *.Returns a newl
ddb0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 53 6f 63 6b y allocated Sock
ddc0: 65 74 49 6e 66 6f 2e 0a 20 20 2a 0a 20 20 2a 20 etInfo.. *. *
ddd0: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2d 20 Side effects:.-
dde0: 2a 09 41 64 64 73 20 74 68 65 20 73 6f 63 6b 65 *.Adds the socke
ddf0: 74 20 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 t to the global
de00: 73 6f 63 6b 65 74 20 6c 69 73 74 2e 0a 2b 20 2a socket list..+ *
de10: 09 4e 6f 6e 65 2c 20 65 78 63 65 70 74 20 66 6f .None, except fo
de20: 72 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 r allocation of
de30: 6d 65 6d 6f 72 79 2e 0a 20 20 2a 0a 20 20 2a 2d memory.. *. *-
de40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
de50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
de60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
de70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
de80: 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a 40 40 20 2d 31 -----. */.@@ -1
de90: 30 34 37 2c 31 30 20 2b 31 30 34 35 2c 31 31 20 047,10 +1045,11
dea0: 40 40 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d @@. infoPtr-
deb0: 3e 61 63 63 65 70 74 50 72 6f 63 20 3d 20 4e 55 >acceptProc = NU
dec0: 4c 4c 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 LL;. infoPtr
ded0: 2d 3e 6c 61 73 74 45 72 72 6f 72 20 3d 20 30 3b ->lastError = 0;
dee0: 0a 20 0a 2d 20 20 20 20 57 61 69 74 46 6f 72 53 . .- WaitForS
def0: 69 6e 67 6c 65 4f 62 6a 65 63 74 28 74 73 64 50 ingleObject(tsdP
df00: 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f tr->socketListLo
df10: 63 6b 2c 20 49 4e 46 49 4e 49 54 45 29 3b 0a 2d ck, INFINITE);.-
df20: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 78 infoPtr->nex
df30: 74 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 73 tPtr = tsdPtr->s
df40: 6f 63 6b 65 74 4c 69 73 74 3b 0a 2d 20 20 20 20 ocketList;.-
df50: 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 tsdPtr->socketLi
df60: 73 74 20 3d 20 69 6e 66 6f 50 74 72 3b 0a 2d 20 st = infoPtr;.-
df70: 20 20 20 53 65 74 45 76 65 6e 74 28 74 73 64 50 SetEvent(tsdP
df80: 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f tr->socketListLo
df90: 63 6b 29 3b 0a 2b 20 20 20 20 2f 2a 20 54 49 50 ck);.+ /* TIP
dfa0: 20 23 32 31 38 2e 20 52 65 6d 6f 76 65 64 20 74 #218. Removed t
dfb0: 68 65 20 63 6f 64 65 20 69 6e 73 65 72 74 69 6e he code insertin
dfc0: 67 20 74 68 65 20 6e 65 77 20 73 74 72 75 63 74 g the new struct
dfd0: 75 72 65 0a 2b 20 20 20 20 20 2a 20 69 6e 74 6f ure.+ * into
dfe0: 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69 73 74 the global list
dff0: 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 68 61 . This is now ha
e000: 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 74 68 72 ndled in the thr
e010: 65 61 64 0a 2b 20 20 20 20 20 2a 20 61 63 74 69 ead.+ * acti
e020: 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e on callbacks, an
e030: 64 20 6f 6e 6c 79 20 74 68 65 72 65 2e 0a 2b 20 d only there..+
e040: 20 20 20 20 2a 2f 0a 2b 20 20 20 20 69 6e 66 6f */.+ info
e050: 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 4e Ptr->nextPtr = N
e060: 55 4c 4c 3b 0a 20 20 20 20 20 0a 20 20 20 20 20 ULL;. .
e070: 72 65 74 75 72 6e 20 69 6e 66 6f 50 74 72 3b 0a return infoPtr;.
e080: 20 7d 0a 40 40 20 2d 31 30 36 37 2c 37 20 2b 31 }.@@ -1067,7 +1
e090: 30 36 36 2c 37 20 40 40 0a 20 20 2a 09 52 65 74 066,7 @@. *.Ret
e0a0: 75 72 6e 73 20 61 20 6e 65 77 20 53 6f 63 6b 65 urns a new Socke
e0b0: 74 49 6e 66 6f 2c 20 6f 72 20 4e 55 4c 4c 20 77 tInfo, or NULL w
e0c0: 69 74 68 20 61 6e 20 65 72 72 6f 72 20 69 6e 20 ith an error in
e0d0: 69 6e 74 65 72 70 2e 0a 20 20 2a 0a 20 20 2a 20 interp.. *. *
e0e0: 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2d 20 Side effects:.-
e0f0: 2a 09 41 64 64 73 20 61 20 6e 65 77 20 73 6f 63 *.Adds a new soc
e100: 6b 65 74 20 74 6f 20 74 68 65 20 73 6f 63 6b 65 ket to the socke
e110: 74 4c 69 73 74 2e 0a 2b 20 2a 09 4e 6f 6e 65 2c tList..+ *.None,
e120: 20 65 78 63 65 70 74 20 66 6f 72 20 61 6c 6c 6f except for allo
e130: 63 61 74 69 6f 6e 20 6f 66 20 6d 65 6d 6f 72 79 cation of memory
e140: 2e 0a 20 20 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d .. *. *-------
e150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
e190: 20 20 2a 2f 0a 40 40 20 2d 32 36 36 30 2c 34 20 */.@@ -2660,4
e1a0: 2b 32 36 35 39 2c 38 34 20 40 40 0a 20 20 20 20 +2659,84 @@.
e1b0: 20 72 65 74 75 72 6e 20 77 69 6e 53 6f 63 6b 2e return winSock.
e1c0: 67 65 74 73 65 72 76 62 79 6e 61 6d 65 28 6e 61 getservbyname(na
e1d0: 6d 65 2c 20 70 72 6f 74 6f 29 3b 0a 20 7d 0a 20 me, proto);. }.
e1e0: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+/*.+ *--------
e1f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b --------------.+
e230: 20 2a 0a 2b 20 2a 20 54 63 70 54 68 72 65 61 64 *.+ * TcpThread
e240: 41 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 2b 20 ActionProc --.+
e250: 2a 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f 72 20 *.+ *.Insert or
e260: 72 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 65 61 remove any threa
e270: 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 6f 20 d local refs to
e280: 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2b 20 this channel..+
e290: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b *.+ * Results:.+
e2a0: 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a *.None..+ *.+ *
e2b0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b Side effects:.+
e2c0: 20 2a 09 43 68 61 6e 67 65 73 20 74 68 72 65 61 *.Changes threa
e2d0: 64 20 6c 6f 63 61 6c 20 6c 69 73 74 20 6f 66 20 d local list of
e2e0: 76 61 6c 69 64 20 63 68 61 6e 6e 65 6c 73 2e 0a valid channels..
e2f0: 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d + *.+ *---------
e300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
e330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 -------------.+
e340: 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 76 6f 69 */.+.+static voi
e350: 64 0a 2b 54 63 70 54 68 72 65 61 64 41 63 74 69 d.+TcpThreadActi
e360: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65 onProc (instance
e370: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20 Data, action).+
e380: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 ClientData i
e390: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 nstanceData;.+
e3a0: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 2b int action;.+
e3b0: 7b 0a 2b 20 20 20 20 54 68 72 65 61 64 53 70 65 {.+ ThreadSpe
e3c0: 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 cificData *tsdPt
e3d0: 72 3b 0a 2b 20 20 20 20 53 6f 63 6b 65 74 49 6e r;.+ SocketIn
e3e0: 66 6f 20 2a 69 6e 66 6f 50 74 72 20 3d 20 28 53 fo *infoPtr = (S
e3f0: 6f 63 6b 65 74 49 6e 66 6f 20 2a 29 20 69 6e 73 ocketInfo *) ins
e400: 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 20 20 tanceData;.+
e410: 69 6e 74 20 20 20 20 20 20 6e 6f 74 69 66 79 43 int notifyC
e420: 6d 64 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 61 md;.+.+ if (a
e430: 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 ction == TCL_CHA
e440: 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 NNEL_THREAD_INSE
e450: 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f RT) {.+ /
e460: 2a 0a 2b 09 20 2a 20 45 6e 73 75 72 65 20 74 68 *.+. * Ensure th
e470: 61 74 20 73 6f 63 6b 65 74 20 73 75 62 73 79 73 at socket subsys
e480: 74 65 6d 20 69 73 20 69 6e 69 74 69 61 6c 69 7a tem is initializ
e490: 65 64 20 69 6e 20 74 68 69 73 20 74 68 72 65 61 ed in this threa
e4a0: 64 2c 20 6f 72 0a 2b 09 20 2a 20 65 6c 73 65 20 d, or.+. * else
e4b0: 73 6f 63 6b 65 74 73 20 77 69 6c 6c 20 6e 6f 74 sockets will not
e4c0: 20 77 6f 72 6b 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b work..+. */.+.+
e4d0: 20 20 20 20 20 20 20 20 54 63 6c 5f 4d 75 74 65 Tcl_Mute
e4e0: 78 4c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d 75 74 xLock(&socketMut
e4f0: 65 78 29 3b 0a 2b 09 49 6e 69 74 53 6f 63 6b 65 ex);.+.InitSocke
e500: 74 73 28 29 3b 0a 2b 09 54 63 6c 5f 4d 75 74 65 ts();.+.Tcl_Mute
e510: 78 55 6e 6c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d xUnlock(&socketM
e520: 75 74 65 78 29 3b 0a 2b 0a 2b 09 74 73 64 50 74 utex);.+.+.tsdPt
e530: 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 r = TCL_TSD_INIT
e540: 28 26 64 61 74 61 4b 65 79 29 3b 0a 2b 0a 2b 09 (&dataKey);.+.+.
e550: 57 61 69 74 46 6f 72 53 69 6e 67 6c 65 4f 62 6a WaitForSingleObj
e560: 65 63 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b ect(tsdPtr->sock
e570: 65 74 4c 69 73 74 4c 6f 63 6b 2c 20 49 4e 46 49 etListLock, INFI
e580: 4e 49 54 45 29 3b 0a 2b 09 69 6e 66 6f 50 74 72 NITE);.+.infoPtr
e590: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 50 ->nextPtr = tsdP
e5a0: 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 3b 0a tr->socketList;.
e5b0: 2b 09 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 +.tsdPtr->socket
e5c0: 4c 69 73 74 20 3d 20 69 6e 66 6f 50 74 72 3b 0a List = infoPtr;.
e5d0: 2b 09 53 65 74 45 76 65 6e 74 28 74 73 64 50 74 +.SetEvent(tsdPt
e5e0: 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63 r->socketListLoc
e5f0: 6b 29 3b 0a 2b 0a 2b 09 6e 6f 74 69 66 79 43 6d k);.+.+.notifyCm
e600: 64 20 3d 20 53 45 4c 45 43 54 3b 0a 2b 20 20 20 d = SELECT;.+
e610: 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 20 20 20 } else {.+
e620: 20 20 20 53 6f 63 6b 65 74 49 6e 66 6f 20 2a 2a SocketInfo **
e630: 6e 65 78 74 50 74 72 50 74 72 3b 0a 2b 09 69 6e nextPtrPtr;.+.in
e640: 74 20 72 65 6d 6f 76 65 64 20 3d 20 30 3b 0a 2b t removed = 0;.+
e650: 0a 2b 09 74 73 64 50 74 72 20 20 3d 20 54 43 4c .+.tsdPtr = TCL
e660: 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b _TSD_INIT(&dataK
e670: 65 79 29 3b 0a 2b 0a 2b 09 2f 2a 20 54 49 50 20 ey);.+.+./* TIP
e680: 23 32 31 38 2c 20 42 75 67 66 69 78 3a 20 41 6c #218, Bugfix: Al
e690: 6c 20 61 63 63 65 73 73 20 74 6f 20 73 6f 63 6b l access to sock
e6a0: 65 74 4c 69 73 74 20 68 61 73 20 74 6f 20 62 65 etList has to be
e6b0: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 protected by th
e6c0: 65 20 6c 6f 63 6b 20 2a 2f 0a 2b 09 57 61 69 74 e lock */.+.Wait
e6d0: 46 6f 72 53 69 6e 67 6c 65 4f 62 6a 65 63 74 28 ForSingleObject(
e6e0: 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 tsdPtr->socketLi
e6f0: 73 74 4c 6f 63 6b 2c 20 49 4e 46 49 4e 49 54 45 stLock, INFINITE
e700: 29 3b 0a 2b 09 66 6f 72 20 28 6e 65 78 74 50 74 );.+.for (nextPt
e710: 72 50 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d rPtr = &(tsdPtr-
e720: 3e 73 6f 63 6b 65 74 4c 69 73 74 29 3b 20 28 2a >socketList); (*
e730: 6e 65 78 74 50 74 72 50 74 72 29 20 21 3d 20 4e nextPtrPtr) != N
e740: 55 4c 4c 3b 0a 2b 09 20 20 20 20 20 6e 65 78 74 ULL;.+. next
e750: 50 74 72 50 74 72 20 3d 20 26 28 28 2a 6e 65 78 PtrPtr = &((*nex
e760: 74 50 74 72 50 74 72 29 2d 3e 6e 65 78 74 50 74 tPtrPtr)->nextPt
e770: 72 29 29 20 7b 0a 2b 09 20 20 20 20 69 66 20 28 r)) {.+. if (
e780: 28 2a 6e 65 78 74 50 74 72 50 74 72 29 20 3d 3d (*nextPtrPtr) ==
e790: 20 69 6e 66 6f 50 74 72 29 20 7b 0a 2b 09 20 20 infoPtr) {.+.
e7a0: 20 20 20 20 20 20 28 2a 6e 65 78 74 50 74 72 50 (*nextPtrP
e7b0: 74 72 29 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 6e tr) = infoPtr->n
e7c0: 65 78 74 50 74 72 3b 0a 2b 09 09 72 65 6d 6f 76 extPtr;.+..remov
e7d0: 65 64 20 3d 20 31 3b 0a 2b 09 09 62 72 65 61 6b ed = 1;.+..break
e7e0: 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d 0a 2b 09 ;.+. }.+.}.+.
e7f0: 53 65 74 45 76 65 6e 74 28 74 73 64 50 74 72 2d SetEvent(tsdPtr-
e800: 3e 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63 6b 29 >socketListLock)
e810: 3b 0a 2b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 54 68 ;.+.+./*.+. * Th
e820: 69 73 20 63 6f 75 6c 64 20 68 61 70 70 65 6e 20 is could happen
e830: 69 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 77 if the channel w
e840: 61 73 20 63 72 65 61 74 65 64 20 69 6e 20 6f 6e as created in on
e850: 65 20 74 68 72 65 61 64 0a 2b 09 20 2a 20 61 6e e thread.+. * an
e860: 64 20 74 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20 d then moved to
e870: 61 6e 6f 74 68 65 72 20 77 69 74 68 6f 75 74 20 another without
e880: 75 70 64 61 74 69 6e 67 20 74 68 65 20 74 68 72 updating the thr
e890: 65 61 64 0a 2b 09 20 2a 20 6c 6f 63 61 6c 20 64 ead.+. * local d
e8a0: 61 74 61 20 69 6e 20 65 61 63 68 20 74 68 72 65 ata in each thre
e8b0: 61 64 2e 0a 2b 09 20 2a 2f 0a 20 0a 2b 09 69 66 ad..+. */. .+.if
e8c0: 20 28 21 72 65 6d 6f 76 65 64 29 20 7b 0a 2b 09 (!removed) {.+.
e8d0: 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22 66 Tcl_Panic("f
e8e0: 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e 6f 74 ile info ptr not
e8f0: 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 6e 6e on thread chann
e900: 65 6c 20 6c 69 73 74 22 29 3b 0a 2b 09 7d 0a 2b el list");.+.}.+
e910: 0a 2b 09 6e 6f 74 69 66 79 43 6d 64 20 3d 20 55 .+.notifyCmd = U
e920: 4e 53 45 4c 45 43 54 3b 0a 2b 20 20 20 20 7d 0a NSELECT;.+ }.
e930: 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 +.+ /*.+
e940: 2a 20 45 6e 73 75 72 65 20 74 68 61 74 2c 20 6f * Ensure that, o
e950: 72 20 73 74 6f 70 2c 20 6e 6f 74 69 66 69 63 61 r stop, notifica
e960: 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 73 6f tions for the so
e970: 63 6b 65 74 20 6f 63 63 75 72 20 69 6e 20 74 68 cket occur in th
e980: 69 73 20 74 68 72 65 61 64 2e 0a 2b 20 20 20 20 is thread..+
e990: 20 2a 2f 0a 2b 0a 2b 20 20 20 20 53 65 6e 64 4d */.+.+ SendM
e9a0: 65 73 73 61 67 65 28 74 73 64 50 74 72 2d 3e 68 essage(tsdPtr->h
e9b0: 77 6e 64 2c 20 53 4f 43 4b 45 54 5f 53 45 4c 45 wnd, SOCKET_SELE
e9c0: 43 54 2c 0a 2b 09 09 28 57 50 41 52 41 4d 29 20 CT,.+..(WPARAM)
e9d0: 6e 6f 74 69 66 79 43 6d 64 2c 20 28 4c 50 41 52 notifyCmd, (LPAR
e9e0: 41 4d 29 20 69 6e 66 6f 50 74 72 29 3b 0a 2b 7d AM) infoPtr);.+}
e9f0: 0a .