Attachment "tcl8.5_all_003.diff" to
ticket [875701ffff]
added by
andreas_kupries
2005-01-27 06:43:32.
0000: 49 6e 64 65 78 3a 20 64 6f 63 2f 43 72 74 43 68 Index: doc/CrtCh
0010: 61 6e 6e 65 6c 2e 33 0a 3d 3d 3d 3d 3d 3d 3d 3d annel.3.========
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 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
0060: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
0070: 63 6c 2f 74 63 6c 2f 64 6f 63 2f 43 72 74 43 68 cl/tcl/doc/CrtCh
0080: 61 6e 6e 65 6c 2e 33 2c 76 0a 72 65 74 72 69 65 annel.3,v.retrie
0090: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
00a0: 32 34 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 24.diff -w -u -r
00b0: 31 2e 32 34 20 43 72 74 43 68 61 6e 6e 65 6c 2e 1.24 CrtChannel.
00c0: 33 0a 2d 2d 2d 20 64 6f 63 2f 43 72 74 43 68 61 3.--- doc/CrtCha
00d0: 6e 6e 65 6c 2e 33 09 31 32 20 4e 6f 76 20 32 30 nnel.3.12 Nov 20
00e0: 30 34 20 30 39 3a 30 31 3a 32 35 20 2d 30 30 30 04 09:01:25 -000
00f0: 30 09 31 2e 32 34 0a 2b 2b 2b 20 64 6f 63 2f 43 0.1.24.+++ doc/C
0100: 72 74 43 68 61 6e 6e 65 6c 2e 33 09 32 36 20 4a rtChannel.3.26 J
0110: 61 6e 20 32 30 30 35 20 32 33 3a 33 36 3a 35 30 an 2005 23:36:50
0120: 20 2d 30 30 30 30 0a 40 40 20 2d 37 2c 31 31 20 -0000.@@ -7,11
0130: 2b 37 2c 31 31 20 40 40 0a 20 27 5c 22 0a 20 27 +7,11 @@. '\". '
0140: 5c 22 20 52 43 53 3a 20 40 28 23 29 20 24 49 64 \" RCS: @(#) $Id
0150: 3a 20 43 72 74 43 68 61 6e 6e 65 6c 2e 33 2c 76 : CrtChannel.3,v
0160: 20 31 2e 32 34 20 32 30 30 34 2f 31 31 2f 31 32 1.24 2004/11/12
0170: 20 30 39 3a 30 31 3a 32 35 20 64 61 73 20 45 78 09:01:25 das Ex
0180: 70 20 24 0a 20 2e 73 6f 20 6d 61 6e 2e 6d 61 63 p $. .so man.mac
0190: 72 6f 73 0a 2d 2e 54 48 20 54 63 6c 5f 43 72 65 ros.-.TH Tcl_Cre
01a0: 61 74 65 43 68 61 6e 6e 65 6c 20 33 20 38 2e 33 ateChannel 3 8.3
01b0: 20 54 63 6c 20 22 54 63 6c 20 4c 69 62 72 61 72 Tcl "Tcl Librar
01c0: 79 20 50 72 6f 63 65 64 75 72 65 73 22 0a 2b 2e y Procedures".+.
01d0: 54 48 20 54 63 6c 5f 43 72 65 61 74 65 43 68 61 TH Tcl_CreateCha
01e0: 6e 6e 65 6c 20 33 20 38 2e 34 20 54 63 6c 20 22 nnel 3 8.4 Tcl "
01f0: 54 63 6c 20 4c 69 62 72 61 72 79 20 50 72 6f 63 Tcl Library Proc
0200: 65 64 75 72 65 73 22 0a 20 2e 42 53 0a 20 27 5c edures". .BS. '\
0210: 22 20 4e 6f 74 65 3a 20 20 64 6f 20 6e 6f 74 20 " Note: do not
0220: 6d 6f 64 69 66 79 20 74 68 65 20 2e 53 48 20 4e modify the .SH N
0230: 41 4d 45 20 6c 69 6e 65 20 69 6d 6d 65 64 69 61 AME line immedia
0240: 74 65 6c 79 20 62 65 6c 6f 77 21 0a 20 2e 53 48 tely below!. .SH
0250: 20 4e 41 4d 45 0a 2d 54 63 6c 5f 43 72 65 61 74 NAME.-Tcl_Creat
0260: 65 43 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f 47 65 eChannel, Tcl_Ge
0270: 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65 tChannelInstance
0280: 44 61 74 61 2c 20 54 63 6c 5f 47 65 74 43 68 61 Data, Tcl_GetCha
0290: 6e 6e 65 6c 54 79 70 65 2c 20 54 63 6c 5f 47 65 nnelType, Tcl_Ge
02a0: 74 43 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 54 63 tChannelName, Tc
02b0: 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 48 61 6e 64 l_GetChannelHand
02c0: 6c 65 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e le, Tcl_GetChann
02d0: 65 6c 4d 6f 64 65 2c 20 54 63 6c 5f 47 65 74 43 elMode, Tcl_GetC
02e0: 68 61 6e 6e 65 6c 42 75 66 66 65 72 53 69 7a 65 hannelBufferSize
02f0: 2c 20 54 63 6c 5f 53 65 74 43 68 61 6e 6e 65 6c , Tcl_SetChannel
0300: 42 75 66 66 65 72 53 69 7a 65 2c 20 54 63 6c 5f BufferSize, Tcl_
0310: 4e 6f 74 69 66 79 43 68 61 6e 6e 65 6c 2c 20 54 NotifyChannel, T
0320: 63 6c 5f 42 61 64 43 68 61 6e 6e 65 6c 4f 70 74 cl_BadChannelOpt
0330: 69 6f 6e 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c ion, Tcl_Channel
0340: 4e 61 6d 65 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Name, Tcl_Channe
0350: 6c 56 65 72 73 69 6f 6e 2c 20 54 63 6c 5f 43 68 lVersion, Tcl_Ch
0360: 61 6e 6e 65 6c 42 6c 6f 63 6b 4d 6f 64 65 50 72 annelBlockModePr
0370: 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 43 oc, Tcl_ChannelC
0380: 6c 6f 73 65 50 72 6f 63 2c 20 54 63 6c 5f 43 68 loseProc, Tcl_Ch
0390: 61 6e 6e 65 6c 43 6c 6f 73 65 32 50 72 6f 63 2c annelClose2Proc,
03a0: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 49 6e 70 75 Tcl_ChannelInpu
03b0: 74 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e tProc, Tcl_Chann
03c0: 65 6c 4f 75 74 70 75 74 50 72 6f 63 2c 20 54 63 elOutputProc, Tc
03d0: 6c 5f 43 68 61 6e 6e 65 6c 53 65 65 6b 50 72 6f l_ChannelSeekPro
03e0: 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 69 c, Tcl_ChannelWi
03f0: 64 65 53 65 65 6b 50 72 6f 63 2c 20 54 63 6c 5f deSeekProc, Tcl_
0400: 43 68 61 6e 6e 65 6c 53 65 74 4f 70 74 69 6f 6e ChannelSetOption
0410: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Proc, Tcl_Channe
0420: 6c 47 65 74 4f 70 74 69 6f 6e 50 72 6f 63 2c 20 lGetOptionProc,
0430: 54 63 6c 5f 43 68 61 6e 6e 65 6c 57 61 74 63 68 Tcl_ChannelWatch
0440: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Proc, Tcl_Channe
0450: 6c 47 65 74 48 61 6e 64 6c 65 50 72 6f 63 2c 20 lGetHandleProc,
0460: 54 63 6c 5f 43 68 61 6e 6e 65 6c 46 6c 75 73 68 Tcl_ChannelFlush
0470: 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 Proc, Tcl_Channe
0480: 6c 48 61 6e 64 6c 65 72 50 72 6f 63 2c 20 54 63 lHandlerProc, Tc
0490: 6c 5f 49 73 43 68 61 6e 6e 65 6c 53 68 61 72 65 l_IsChannelShare
04a0: 64 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 6c d, Tcl_IsChannel
04b0: 52 65 67 69 73 74 65 72 65 64 2c 20 54 63 6c 5f Registered, Tcl_
04c0: 43 75 74 43 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f CutChannel, Tcl_
04d0: 53 70 6c 69 63 65 43 68 61 6e 6e 65 6c 2c 20 54 SpliceChannel, T
04e0: 63 6c 5f 49 73 43 68 61 6e 6e 65 6c 45 78 69 73 cl_IsChannelExis
04f0: 74 69 6e 67 2c 20 54 63 6c 5f 43 6c 65 61 72 43 ting, Tcl_ClearC
0500: 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 73 2c 20 hannelHandlers,
0510: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 68 Tcl_GetChannelTh
0520: 72 65 61 64 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 read, Tcl_Channe
0530: 6c 42 75 66 66 65 72 65 64 20 5c 2d 20 70 72 6f lBuffered \- pro
0540: 63 65 64 75 72 65 73 20 66 6f 72 20 63 72 65 61 cedures for crea
0550: 74 69 6e 67 20 61 6e 64 20 6d 61 6e 69 70 75 6c ting and manipul
0560: 61 74 69 6e 67 20 63 68 61 6e 6e 65 6c 73 0a 2b ating channels.+
0570: 54 63 6c 5f 43 72 65 61 74 65 43 68 61 6e 6e 65 Tcl_CreateChanne
0580: 6c 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 l, Tcl_GetChanne
0590: 6c 49 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 54 lInstanceData, T
05a0: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70 cl_GetChannelTyp
05b0: 65 2c 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 e, Tcl_GetChanne
05c0: 6c 4e 61 6d 65 2c 20 54 63 6c 5f 47 65 74 43 68 lName, Tcl_GetCh
05d0: 61 6e 6e 65 6c 48 61 6e 64 6c 65 2c 20 54 63 6c annelHandle, Tcl
05e0: 5f 47 65 74 43 68 61 6e 6e 65 6c 4d 6f 64 65 2c _GetChannelMode,
05f0: 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 42 Tcl_GetChannelB
0600: 75 66 66 65 72 53 69 7a 65 2c 20 54 63 6c 5f 53 ufferSize, Tcl_S
0610: 65 74 43 68 61 6e 6e 65 6c 42 75 66 66 65 72 53 etChannelBufferS
0620: 69 7a 65 2c 20 54 63 6c 5f 4e 6f 74 69 66 79 43 ize, Tcl_NotifyC
0630: 68 61 6e 6e 65 6c 2c 20 54 63 6c 5f 42 61 64 43 hannel, Tcl_BadC
0640: 68 61 6e 6e 65 6c 4f 70 74 69 6f 6e 2c 20 54 63 hannelOption, Tc
0650: 6c 5f 43 68 61 6e 6e 65 6c 4e 61 6d 65 2c 20 54 l_ChannelName, T
0660: 63 6c 5f 43 68 61 6e 6e 65 6c 56 65 72 73 69 6f cl_ChannelVersio
0670: 6e 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 42 6c n, Tcl_ChannelBl
0680: 6f 63 6b 4d 6f 64 65 50 72 6f 63 2c 20 54 63 6c ockModeProc, Tcl
0690: 5f 43 68 61 6e 6e 65 6c 43 6c 6f 73 65 50 72 6f _ChannelClosePro
06a0: 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 43 6c c, Tcl_ChannelCl
06b0: 6f 73 65 32 50 72 6f 63 2c 20 54 63 6c 5f 43 68 ose2Proc, Tcl_Ch
06c0: 61 6e 6e 65 6c 49 6e 70 75 74 50 72 6f 63 2c 20 annelInputProc,
06d0: 54 63 6c 5f 43 68 61 6e 6e 65 6c 4f 75 74 70 75 Tcl_ChannelOutpu
06e0: 74 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e tProc, Tcl_Chann
06f0: 65 6c 53 65 65 6b 50 72 6f 63 2c 20 54 63 6c 5f elSeekProc, Tcl_
0700: 43 68 61 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 ChannelWideSeekP
0710: 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e 65 6c roc, Tcl_Channel
0720: 53 65 74 4f 70 74 69 6f 6e 50 72 6f 63 2c 20 54 SetOptionProc, T
0730: 63 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 4f 70 74 cl_ChannelGetOpt
0740: 69 6f 6e 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 ionProc, Tcl_Cha
0750: 6e 6e 65 6c 57 61 74 63 68 50 72 6f 63 2c 20 54 nnelWatchProc, T
0760: 63 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 48 61 6e cl_ChannelGetHan
0770: 64 6c 65 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 dleProc, Tcl_Cha
0780: 6e 6e 65 6c 46 6c 75 73 68 50 72 6f 63 2c 20 54 nnelFlushProc, T
0790: 63 6c 5f 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 cl_ChannelHandle
07a0: 72 50 72 6f 63 2c 20 54 63 6c 5f 43 68 61 6e 6e rProc, Tcl_Chann
07b0: 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 elThreadActionPr
07c0: 6f 63 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e 65 oc, Tcl_IsChanne
07d0: 6c 53 68 61 72 65 64 2c 20 54 63 6c 5f 49 73 43 lShared, Tcl_IsC
07e0: 68 61 6e 6e 65 6c 52 65 67 69 73 74 65 72 65 64 hannelRegistered
07f0: 2c 20 54 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c , Tcl_CutChannel
0800: 2c 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e , Tcl_SpliceChan
0810: 6e 65 6c 2c 20 54 63 6c 5f 49 73 43 68 61 6e 6e nel, Tcl_IsChann
0820: 65 6c 45 78 69 73 74 69 6e 67 2c 20 54 63 6c 5f elExisting, Tcl_
0830: 43 6c 65 61 72 43 68 61 6e 6e 65 6c 48 61 6e 64 ClearChannelHand
0840: 6c 65 72 73 2c 20 54 63 6c 5f 47 65 74 43 68 61 lers, Tcl_GetCha
0850: 6e 6e 65 6c 54 68 72 65 61 64 2c 20 54 63 6c 5f nnelThread, Tcl_
0860: 43 68 61 6e 6e 65 6c 42 75 66 66 65 72 65 64 20 ChannelBuffered
0870: 5c 2d 20 70 72 6f 63 65 64 75 72 65 73 20 66 6f \- procedures fo
0880: 72 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 6d r creating and m
0890: 61 6e 69 70 75 6c 61 74 69 6e 67 20 63 68 61 6e anipulating chan
08a0: 6e 65 6c 73 0a 20 2e 53 48 20 53 59 4e 4f 50 53 nels. .SH SYNOPS
08b0: 49 53 0a 20 2e 6e 66 0a 20 5c 66 42 23 69 6e 63 IS. .nf. \fB#inc
08c0: 6c 75 64 65 20 3c 74 63 6c 2e 68 3e 5c 66 52 0a lude <tcl.h>\fR.
08d0: 40 40 20 2d 39 39 2c 36 20 2b 39 39 2c 39 20 40 @@ -99,6 +99,9 @
08e0: 40 0a 20 2e 56 53 20 38 2e 34 0a 20 54 63 6c 5f @. .VS 8.4. Tcl_
08f0: 44 72 69 76 65 72 57 69 64 65 53 65 65 6b 50 72 DriverWideSeekPr
0900: 6f 63 20 2a 0a 20 5c 66 42 54 63 6c 5f 43 68 61 oc *. \fBTcl_Cha
0910: 6e 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 nnelWideSeekProc
0920: 5c 66 52 28 5c 66 49 74 79 70 65 50 74 72 5c 66 \fR(\fItypePtr\f
0930: 52 29 0a 2b 2e 73 70 0a 2b 54 63 6c 5f 44 72 69 R).+.sp.+Tcl_Dri
0940: 76 65 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 verThreadActionP
0950: 72 6f 63 20 2a 0a 2b 5c 66 42 54 63 6c 5f 43 68 roc *.+\fBTcl_Ch
0960: 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f annelThreadActio
0970: 6e 50 72 6f 63 5c 66 52 28 5c 66 49 74 79 70 65 nProc\fR(\fItype
0980: 50 74 72 5c 66 52 29 0a 20 2e 56 45 20 38 2e 34 Ptr\fR). .VE 8.4
0990: 0a 20 2e 73 70 0a 20 54 63 6c 5f 44 72 69 76 65 . .sp. Tcl_Drive
09a0: 72 53 65 74 4f 70 74 69 6f 6e 50 72 6f 63 20 2a rSetOptionProc *
09b0: 0a 40 40 20 2d 32 39 30 2c 31 30 20 2b 32 39 33 .@@ -290,10 +293
09c0: 2c 32 30 20 40 40 0a 20 28 74 68 72 65 61 64 29 ,20 @@. (thread)
09d0: 67 6c 6f 62 61 6c 20 6c 69 73 74 20 6f 66 20 61 global list of a
09e0: 6c 6c 20 63 68 61 6e 6e 65 6c 73 20 28 6f 66 20 ll channels (of
09f0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 the current thre
0a00: 61 64 29 2e 0a 20 41 70 70 6c 69 63 61 74 69 6f ad).. Applicatio
0a10: 6e 20 74 6f 20 61 20 63 68 61 6e 6e 65 6c 20 73 n to a channel s
0a20: 74 69 6c 6c 20 72 65 67 69 73 74 65 72 65 64 20 till registered
0a30: 69 6e 20 73 6f 6d 65 20 69 6e 74 65 72 70 72 65 in some interpre
0a40: 74 65 72 0a 20 69 73 20 6e 6f 74 20 61 6c 6c 6f ter. is not allo
0a50: 77 65 64 2e 0a 2b 2e 56 53 20 38 2e 35 0a 2b 41 wed..+.VS 8.5.+A
0a60: 6c 73 6f 20 6e 6f 74 69 66 69 65 73 20 74 68 65 lso notifies the
0a70: 20 64 72 69 76 65 72 20 69 66 20 74 68 65 20 5c driver if the \
0a80: 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 fBTcl_ChannelTyp
0a90: 65 5c 66 52 20 76 65 72 73 69 6f 6e 20 69 73 0a e\fR version is.
0aa0: 2b 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f +\fBTCL_CHANNEL_
0ab0: 56 45 52 53 49 4f 4e 5f 34 5c 66 52 20 28 6f 72 VERSION_4\fR (or
0ac0: 20 68 69 67 68 65 72 29 2c 20 61 6e 64 0a 2b 5c higher), and.+\
0ad0: 66 42 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 fBTcl_DriverThre
0ae0: 61 64 41 63 74 69 6f 6e 50 72 6f 63 5c 66 52 20 adActionProc\fR
0af0: 69 73 20 64 65 66 69 6e 65 64 20 66 6f 72 20 69 is defined for i
0b00: 74 2e 0a 2b 2e 56 45 20 38 2e 35 0a 20 2e 50 50 t..+.VE 8.5. .PP
0b10: 0a 20 5c 66 42 54 63 6c 5f 53 70 6c 69 63 65 43 . \fBTcl_SpliceC
0b20: 68 61 6e 6e 65 6c 5c 66 52 20 61 64 64 73 20 74 hannel\fR adds t
0b30: 68 65 20 73 70 65 63 69 66 69 65 64 20 5c 66 49 he specified \fI
0b40: 63 68 61 6e 6e 65 6c 5c 66 52 20 74 6f 20 74 68 channel\fR to th
0b50: 65 0a 20 28 74 68 72 65 61 64 29 67 6c 6f 62 61 e. (thread)globa
0b60: 6c 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 l list of all ch
0b70: 61 6e 6e 65 6c 73 20 28 6f 66 20 74 68 65 20 63 annels (of the c
0b80: 75 72 72 65 6e 74 20 74 68 72 65 61 64 29 2e 0a urrent thread)..
0b90: 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 74 6f 20 Application to
0ba0: 61 20 63 68 61 6e 6e 65 6c 20 72 65 67 69 73 74 a channel regist
0bb0: 65 72 65 64 20 69 6e 20 73 6f 6d 65 20 69 6e 74 ered in some int
0bc0: 65 72 70 72 65 74 65 72 20 69 73 20 6e 6f 74 20 erpreter is not
0bd0: 61 6c 6c 6f 77 65 64 2e 0a 2b 2e 56 53 20 38 2e allowed..+.VS 8.
0be0: 35 0a 2b 41 6c 73 6f 20 6e 6f 74 69 66 69 65 73 5.+Also notifies
0bf0: 20 74 68 65 20 64 72 69 76 65 72 20 69 66 20 74 the driver if t
0c00: 68 65 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 he \fBTcl_Channe
0c10: 6c 54 79 70 65 5c 66 52 20 76 65 72 73 69 6f 6e lType\fR version
0c20: 20 69 73 0a 2b 5c 66 42 54 43 4c 5f 43 48 41 4e is.+\fBTCL_CHAN
0c30: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 5c 66 52 NEL_VERSION_4\fR
0c40: 20 28 6f 72 20 68 69 67 68 65 72 29 2c 20 61 6e (or higher), an
0c50: 64 0a 2b 5c 66 42 54 63 6c 5f 44 72 69 76 65 72 d.+\fBTcl_Driver
0c60: 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 ThreadActionProc
0c70: 5c 66 52 20 69 73 20 64 65 66 69 6e 65 64 20 66 \fR is defined f
0c80: 6f 72 20 69 74 2e 0a 2b 2e 56 45 20 38 2e 35 0a or it..+.VE 8.5.
0c90: 20 2e 50 50 0a 20 5c 66 42 54 63 6c 5f 43 6c 65 .PP. \fBTcl_Cle
0ca0: 61 72 43 68 61 6e 6e 65 6c 48 61 6e 64 6c 65 72 arChannelHandler
0cb0: 73 5c 66 52 20 72 65 6d 6f 76 65 73 20 61 6c 6c s\fR removes all
0cc0: 20 63 68 61 6e 6e 65 6c 68 61 6e 64 6c 65 72 73 channelhandlers
0cd0: 20 61 6e 64 20 65 76 65 6e 74 0a 20 73 63 72 69 and event. scri
0ce0: 70 74 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 pts associated w
0cf0: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65 ith the specifie
0d00: 64 20 5c 66 49 63 68 61 6e 6e 65 6c 5c 66 52 2c d \fIchannel\fR,
0d10: 20 74 68 75 73 20 73 68 75 74 74 69 6e 67 0a 40 thus shutting.@
0d20: 40 20 2d 33 32 36 2c 36 20 2b 33 33 39 2c 37 20 @ -326,6 +339,7
0d30: 40 40 0a 20 20 20 20 20 20 20 20 20 54 63 6c 5f @@. Tcl_
0d40: 44 72 69 76 65 72 46 6c 75 73 68 50 72 6f 63 20 DriverFlushProc
0d50: 2a 5c 66 49 66 6c 75 73 68 50 72 6f 63 5c 66 52 *\fIflushProc\fR
0d60: 3b 0a 20 20 20 20 20 20 20 20 20 54 63 6c 5f 44 ;. Tcl_D
0d70: 72 69 76 65 72 48 61 6e 64 6c 65 72 50 72 6f 63 riverHandlerProc
0d80: 20 2a 5c 66 49 68 61 6e 64 6c 65 72 50 72 6f 63 *\fIhandlerProc
0d90: 5c 66 52 3b 0a 20 20 20 20 20 20 20 20 20 54 63 \fR;. Tc
0da0: 6c 5f 44 72 69 76 65 72 57 69 64 65 53 65 65 6b l_DriverWideSeek
0db0: 50 72 6f 63 20 2a 5c 66 49 77 69 64 65 53 65 65 Proc *\fIwideSee
0dc0: 6b 50 72 6f 63 5c 66 52 3b 0a 2b 09 54 63 6c 5f kProc\fR;.+.Tcl_
0dd0: 44 72 69 76 65 72 54 68 72 65 61 64 41 63 74 69 DriverThreadActi
0de0: 6f 6e 50 72 6f 63 20 2a 5c 66 49 74 68 72 65 61 onProc *\fIthrea
0df0: 64 41 63 74 69 6f 6e 50 72 6f 63 5c 66 52 3b 0a dActionProc\fR;.
0e00: 20 7d 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 } Tcl_ChannelTy
0e10: 70 65 3b 0a 20 2e 43 45 0a 20 2e 50 50 0a 40 40 pe;. .CE. .PP.@@
0e20: 20 2d 33 34 36 2c 36 20 2b 33 36 30 2c 37 20 40 -346,6 +360,7 @
0e30: 40 0a 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 @. \fBTcl_Channe
0e40: 6c 4f 75 74 70 75 74 50 72 6f 63 5c 66 52 2c 20 lOutputProc\fR,
0e50: 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 53 65 \fBTcl_ChannelSe
0e60: 65 6b 50 72 6f 63 5c 66 52 2c 0a 20 2e 56 53 20 ekProc\fR,. .VS
0e70: 38 2e 34 0a 20 5c 66 42 54 63 6c 5f 43 68 61 6e 8.4. \fBTcl_Chan
0e80: 6e 65 6c 57 69 64 65 53 65 65 6b 50 72 6f 63 5c nelWideSeekProc\
0e90: 66 52 2c 0a 2b 5c 66 42 54 63 6c 5f 43 68 61 6e fR,.+\fBTcl_Chan
0ea0: 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 nelThreadActionP
0eb0: 72 6f 63 5c 66 52 2c 0a 20 2e 56 45 20 38 2e 34 roc\fR,. .VE 8.4
0ec0: 0a 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c . \fBTcl_Channel
0ed0: 53 65 74 4f 70 74 69 6f 6e 50 72 6f 63 5c 66 52 SetOptionProc\fR
0ee0: 2c 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c , \fBTcl_Channel
0ef0: 47 65 74 4f 70 74 69 6f 6e 50 72 6f 63 5c 66 52 GetOptionProc\fR
0f00: 2c 0a 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 ,. \fBTcl_Channe
0f10: 6c 57 61 74 63 68 50 72 6f 63 5c 66 52 2c 20 5c lWatchProc\fR, \
0f20: 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 47 65 74 fBTcl_ChannelGet
0f30: 48 61 6e 64 6c 65 50 72 6f 63 5c 66 52 2c 0a 40 HandleProc\fR,.@
0f40: 40 20 2d 33 36 35 2c 31 36 20 2b 33 38 30 2c 32 @ -365,16 +380,2
0f50: 35 20 40 40 0a 20 61 20 70 6f 69 6e 74 65 72 20 5 @@. a pointer
0f60: 74 6f 20 74 68 65 20 73 74 72 69 6e 67 2e 0a 20 to the string..
0f70: 2e 53 53 20 56 45 52 53 49 4f 4e 0a 20 2e 50 50 .SS VERSION. .PP
0f80: 0a 2d 54 68 65 20 5c 66 49 76 65 72 73 69 6f 6e .-The \fIversion
0f90: 5c 66 52 20 66 69 65 6c 64 20 73 68 6f 75 6c 64 \fR field should
0fa0: 20 62 65 20 73 65 74 20 74 6f 20 5c 66 42 54 43 be set to \fBTC
0fb0: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
0fc0: 4e 5f 32 5c 66 52 2e 0a 2d 49 66 20 69 74 20 69 N_2\fR..-If it i
0fd0: 73 20 6e 6f 74 20 73 65 74 20 74 6f 20 74 68 69 s not set to thi
0fe0: 73 20 76 61 6c 75 65 20 5c 66 42 54 43 4c 5f 43 s value \fBTCL_C
0ff0: 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 HANNEL_VERSION_3
1000: 5c 66 52 2c 20 74 68 65 6e 20 74 68 69 73 0a 2d \fR, then this.-
1010: 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 \fBTcl_ChannelTy
1020: 70 65 5c 66 52 20 69 73 20 61 73 73 75 6d 65 64 pe\fR is assumed
1030: 20 74 6f 20 68 61 76 65 20 74 68 65 20 6f 6c 64 to have the old
1040: 65 72 20 73 74 72 75 63 74 75 72 65 2e 20 20 53 er structure. S
1050: 65 65 0a 2b 0a 2b 54 68 65 20 5c 66 49 76 65 72 ee.+.+The \fIver
1060: 73 69 6f 6e 5c 66 52 20 66 69 65 6c 64 20 73 68 sion\fR field sh
1070: 6f 75 6c 64 20 62 65 20 73 65 74 20 74 6f 20 74 ould be set to t
1080: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 he version of th
1090: 65 20 73 74 72 75 63 74 75 72 65 0a 2b 74 68 61 e structure.+tha
10a0: 74 20 79 6f 75 20 72 65 71 75 69 72 65 2e 20 5c t you require. \
10b0: 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 fBTCL_CHANNEL_VE
10c0: 52 53 49 4f 4e 5f 32 5c 66 52 20 69 73 20 74 68 RSION_2\fR is th
10d0: 65 20 6d 69 6e 69 6d 75 6d 20 72 65 63 6f 6d 6d e minimum recomm
10e0: 65 6e 64 65 64 2e 0a 2b 2e 56 53 20 38 2e 34 0a ended..+.VS 8.4.
10f0: 2b 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f +\fBTCL_CHANNEL_
1100: 56 45 52 53 49 4f 4e 5f 33 5c 66 52 20 6d 75 73 VERSION_3\fR mus
1110: 74 20 62 65 20 73 65 74 20 74 6f 20 73 70 65 63 t be set to spec
1120: 69 66 69 79 20 74 68 65 20 5c 66 49 77 69 64 65 ifiy the \fIwide
1130: 53 65 65 6b 50 72 6f 63 5c 66 52 20 6d 65 6d 62 SeekProc\fR memb
1140: 65 72 2e 0a 2b 2e 56 45 20 38 2e 34 0a 2b 2e 56 er..+.VE 8.4.+.V
1150: 53 20 38 2e 35 0a 2b 5c 66 42 54 43 4c 5f 43 48 S 8.5.+\fBTCL_CH
1160: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 5c ANNEL_VERSION_4\
1170: 66 52 20 6d 75 73 74 20 62 65 20 73 65 74 20 74 fR must be set t
1180: 6f 20 73 70 65 63 69 66 69 79 20 74 68 65 0a 2b o specifiy the.+
1190: 5c 66 49 74 68 72 65 61 64 41 63 74 69 6f 6e 50 \fIthreadActionP
11a0: 72 6f 63 5c 66 52 20 6d 65 6d 62 65 72 20 28 69 roc\fR member (i
11b0: 6e 63 6c 75 64 65 73 20 5c 66 49 77 69 64 65 53 ncludes \fIwideS
11c0: 65 65 6b 50 72 6f 63 5c 66 52 29 2e 0a 2b 2e 56 eekProc\fR)..+.V
11d0: 45 20 38 2e 35 0a 2b 49 66 20 69 74 20 69 73 20 E 8.5.+If it is
11e0: 6e 6f 74 20 73 65 74 20 74 6f 20 61 6e 79 20 6f not set to any o
11f0: 66 20 74 68 65 73 65 2c 20 74 68 65 6e 20 74 68 f these, then th
1200: 69 73 0a 2b 5c 66 42 54 63 6c 5f 43 68 61 6e 6e is.+\fBTcl_Chann
1210: 65 6c 54 79 70 65 5c 66 52 20 69 73 20 61 73 73 elType\fR is ass
1220: 75 6d 65 64 20 74 6f 20 68 61 76 65 20 74 68 65 umed to have the
1230: 20 6f 72 69 67 69 6e 61 6c 20 73 74 72 75 63 74 original struct
1240: 75 72 65 2e 20 20 53 65 65 0a 20 5c 66 42 4f 4c ure. See. \fBOL
1250: 44 20 43 48 41 4e 4e 45 4c 20 54 59 50 45 53 5c D CHANNEL TYPES\
1260: 66 52 20 66 6f 72 20 6d 6f 72 65 20 64 65 74 61 fR for more deta
1270: 69 6c 73 2e 20 20 57 68 69 6c 65 20 54 63 6c 20 ils. While Tcl
1280: 77 69 6c 6c 20 72 65 63 6f 67 6e 69 7a 65 0a 2d will recognize.-
1290: 61 6e 64 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 and function wit
12a0: 68 20 65 69 74 68 65 72 20 73 74 72 75 63 74 75 h either structu
12b0: 72 65 2c 20 73 74 61 63 6b 65 64 20 63 68 61 6e re, stacked chan
12c0: 6e 65 6c 73 20 6d 75 73 74 20 62 65 20 6f 66 20 nels must be of
12d0: 61 74 0a 2b 61 6e 64 20 66 75 6e 63 74 69 6f 6e at.+and function
12e0: 20 77 69 74 68 20 65 69 74 68 65 72 20 73 74 72 with either str
12f0: 75 63 74 75 72 65 73 2c 20 73 74 61 63 6b 65 64 uctures, stacked
1300: 20 63 68 61 6e 6e 65 6c 73 20 6d 75 73 74 20 62 channels must b
1310: 65 20 6f 66 20 61 74 0a 20 6c 65 61 73 74 20 5c e of at. least \
1320: 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 fBTCL_CHANNEL_VE
1330: 52 53 49 4f 4e 5f 32 5c 66 52 20 74 6f 20 66 75 RSION_2\fR to fu
1340: 6e 63 74 69 6f 6e 20 63 6f 72 72 65 63 74 6c 79 nction correctly
1350: 2e 0a 20 2e 50 50 0a 20 54 68 69 73 20 76 61 6c .. .PP. This val
1360: 75 65 20 63 61 6e 20 62 65 20 72 65 74 72 69 65 ue can be retrie
1370: 76 65 64 20 77 69 74 68 20 5c 66 42 54 63 6c 5f ved with \fBTcl_
1380: 43 68 61 6e 6e 65 6c 56 65 72 73 69 6f 6e 5c 66 ChannelVersion\f
1390: 52 2c 20 77 68 69 63 68 20 72 65 74 75 72 6e 73 R, which returns
13a0: 0a 20 2e 56 53 20 38 2e 34 0a 2d 6f 6e 65 20 6f . .VS 8.4.-one o
13b0: 66 20 5c 66 42 54 43 4c 5f 43 48 41 4e 4e 45 4c f \fBTCL_CHANNEL
13c0: 5f 56 45 52 53 49 4f 4e 5f 33 5c 66 52 2c 0a 2b _VERSION_3\fR,.+
13d0: 6f 6e 65 20 6f 66 20 5c 66 42 54 43 4c 5f 43 48 one of \fBTCL_CH
13e0: 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 5c ANNEL_VERSION_4\
13f0: 66 52 2c 20 5c 66 42 54 43 4c 5f 43 48 41 4e 4e fR, \fBTCL_CHANN
1400: 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 5c 66 52 2c EL_VERSION_3\fR,
1410: 0a 20 2e 56 45 20 38 2e 34 0a 20 5c 66 42 54 43 . .VE 8.4. \fBTC
1420: 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f L_CHANNEL_VERSIO
1430: 4e 5f 32 5c 66 52 20 6f 72 20 5c 66 42 54 43 4c N_2\fR or \fBTCL
1440: 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e _CHANNEL_VERSION
1450: 5f 31 5c 66 52 2e 0a 20 2e 53 53 20 42 4c 4f 43 _1\fR.. .SS BLOC
1460: 4b 4d 4f 44 45 50 52 4f 43 0a 40 40 20 2d 37 37 KMODEPROC.@@ -77
1470: 35 2c 36 20 2b 37 39 39 2c 33 36 20 40 40 0a 20 5,6 +799,36 @@.
1480: 2e 50 50 0a 20 54 68 69 73 20 76 61 6c 75 65 20 .PP. This value
1490: 63 61 6e 20 62 65 20 72 65 74 72 69 65 76 65 64 can be retrieved
14a0: 20 77 69 74 68 20 5c 66 42 54 63 6c 5f 43 68 61 with \fBTcl_Cha
14b0: 6e 6e 65 6c 48 61 6e 64 6c 65 72 50 72 6f 63 5c nnelHandlerProc\
14c0: 66 52 2c 20 77 68 69 63 68 20 72 65 74 75 72 6e fR, which return
14d0: 73 0a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 s. a pointer to
14e0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2b 0a the function..+.
14f0: 2b 2e 56 53 20 38 2e 34 0a 2b 2e 53 53 20 22 54 +.VS 8.4.+.SS "T
1500: 48 52 45 41 44 41 43 54 49 4f 4e 50 52 4f 43 22 HREADACTIONPROC"
1510: 0a 2b 2e 50 50 0a 2b 54 68 65 20 5c 66 74 68 72 .+.PP.+The \fthr
1520: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 5c 66 52 eadActionProc\fR
1530: 20 66 69 65 6c 64 20 63 6f 6e 74 61 69 6e 73 20 field contains
1540: 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 the address of t
1550: 68 65 20 66 75 6e 63 74 69 6f 6e 0a 2b 63 61 6c he function.+cal
1560: 6c 65 64 20 62 79 20 74 68 65 20 67 65 6e 65 72 led by the gener
1570: 69 63 20 6c 61 79 65 72 20 77 68 65 6e 20 61 20 ic layer when a
1580: 63 68 61 6e 6e 65 6c 20 69 73 20 63 72 65 61 74 channel is creat
1590: 65 64 2c 20 63 6c 6f 73 65 64 2c 20 6f 72 0a 2b ed, closed, or.+
15a0: 67 6f 69 6e 67 20 74 6f 20 6d 6f 76 65 20 74 6f going to move to
15b0: 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 68 72 a different thr
15c0: 65 61 64 2c 20 69 2e 65 2e 20 77 68 65 6e 65 76 ead, i.e. whenev
15d0: 65 72 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 er thread-specif
15e0: 69 63 0a 2b 64 72 69 76 65 72 20 73 74 61 74 65 ic.+driver state
15f0: 20 6d 69 67 68 74 20 68 61 76 65 20 74 6f 20 69 might have to i
1600: 6e 69 74 69 61 6c 69 7a 65 64 20 6f 72 20 75 70 nitialized or up
1610: 64 61 74 65 64 2e 20 49 74 20 63 61 6e 20 62 65 dated. It can be
1620: 20 4e 55 4c 4c 2e 0a 2b 54 68 65 20 61 63 74 69 NULL..+The acti
1630: 6f 6e 20 5c 66 49 54 43 4c 5f 43 48 41 4e 4e 45 on \fITCL_CHANNE
1640: 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f 56 45 5c L_THREAD_REMOVE\
1650: 66 52 20 69 73 20 75 73 65 64 20 74 6f 20 6e 6f fR is used to no
1660: 74 69 66 79 20 74 68 65 0a 2b 64 72 69 76 65 72 tify the.+driver
1670: 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c 64 20 that it should
1680: 75 70 64 61 74 65 20 6f 72 20 72 65 6d 6f 76 65 update or remove
1690: 20 61 6e 79 20 74 68 72 65 61 64 2d 73 70 65 63 any thread-spec
16a0: 69 66 69 63 20 64 61 74 61 20 69 74 0a 2b 6d 69 ific data it.+mi
16b0: 67 68 74 20 62 65 20 6d 61 69 6e 74 61 69 6e 69 ght be maintaini
16c0: 6e 67 20 66 6f 72 20 74 68 65 20 63 68 61 6e 6e ng for the chann
16d0: 65 6c 2e 0a 2b 2e 50 50 0a 2b 54 68 65 20 61 63 el..+.PP.+The ac
16e0: 74 69 6f 6e 20 5c 66 49 54 43 4c 5f 43 48 41 4e tion \fITCL_CHAN
16f0: 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 52 NEL_THREAD_INSER
1700: 54 5c 66 52 20 69 73 20 75 73 65 64 20 74 6f 20 T\fR is used to
1710: 6e 6f 74 69 66 79 20 74 68 65 0a 2b 64 72 69 76 notify the.+driv
1720: 65 72 20 74 68 61 74 20 69 74 20 73 68 6f 75 6c er that it shoul
1730: 64 20 75 70 64 61 74 65 20 6f 72 20 69 6e 69 74 d update or init
1740: 69 61 6c 69 7a 65 20 61 6e 79 20 74 68 72 65 61 ialize any threa
1750: 64 2d 73 70 65 63 69 66 69 63 20 64 61 74 61 20 d-specific data
1760: 69 74 0a 2b 6d 69 67 68 74 20 62 65 20 6d 61 69 it.+might be mai
1770: 6e 74 61 69 6e 69 6e 67 20 75 73 69 6e 67 20 74 ntaining using t
1780: 68 65 20 63 61 6c 6c 69 6e 67 20 74 68 72 65 61 he calling threa
1790: 64 20 61 73 20 74 68 65 20 61 73 73 6f 63 69 61 d as the associa
17a0: 74 65 2e 20 53 65 65 0a 2b 5c 66 42 54 63 6c 5f te. See.+\fBTcl_
17b0: 43 75 74 43 68 61 6e 6e 65 6c 5c 66 52 20 61 6e CutChannel\fR an
17c0: 64 20 5c 66 42 54 63 6c 5f 53 70 6c 69 63 65 43 d \fBTcl_SpliceC
17d0: 68 61 6e 6e 65 6c 5c 66 52 20 66 6f 72 20 6d 6f hannel\fR for mo
17e0: 72 65 20 64 65 74 61 69 6c 2e 0a 2b 2e 50 50 0a re detail..+.PP.
17f0: 2b 2e 43 53 0a 2b 74 79 70 65 64 65 66 20 76 6f +.CS.+typedef vo
1800: 69 64 20 54 63 6c 5f 44 72 69 76 65 72 54 68 72 id Tcl_DriverThr
1810: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 28 0a 2b eadActionProc(.+
1820: 09 43 6c 69 65 6e 74 44 61 74 61 20 5c 66 49 69 .ClientData \fIi
1830: 6e 73 74 61 6e 63 65 44 61 74 61 5c 66 52 2c 0a nstanceData\fR,.
1840: 2b 20 20 20 20 20 20 69 6e 74 20 20 20 20 20 20 + int
1850: 20 20 5c 66 49 61 63 74 69 6f 6e 5c 66 52 29 3b \fIaction\fR);
1860: 0a 2b 2e 43 45 0a 2b 2e 50 50 0a 2b 5c 66 49 49 .+.CE.+.PP.+\fII
1870: 6e 73 74 61 6e 63 65 44 61 74 61 5c 66 52 20 69 nstanceData\fR i
1880: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 s the same as th
1890: 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 74 e value passed t
18a0: 6f 0a 2b 5c 66 42 54 63 6c 5f 43 72 65 61 74 65 o.+\fBTcl_Create
18b0: 43 68 61 6e 6e 65 6c 5c 66 52 20 77 68 65 6e 20 Channel\fR when
18c0: 74 68 69 73 20 63 68 61 6e 6e 65 6c 20 77 61 73 this channel was
18d0: 20 63 72 65 61 74 65 64 2e 0a 2b 2e 50 50 0a 2b created..+.PP.+
18e0: 54 68 65 73 65 20 76 61 6c 75 65 73 20 63 61 6e These values can
18f0: 20 62 65 20 72 65 74 72 69 65 76 65 64 20 77 69 be retrieved wi
1900: 74 68 20 5c 66 42 54 63 6c 5f 43 68 61 6e 6e 65 th \fBTcl_Channe
1910: 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f lThreadActionPro
1920: 63 5c 66 52 2c 0a 2b 77 68 69 63 68 20 72 65 74 c\fR,.+which ret
1930: 75 72 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 urns a pointer t
1940: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a o the function..
1950: 2b 2e 56 45 20 38 2e 34 0a 2b 0a 20 2e 53 48 20 +.VE 8.4.+. .SH
1960: 54 43 4c 5f 42 41 44 43 48 41 4e 4e 45 4c 4f 50 TCL_BADCHANNELOP
1970: 54 49 4f 4e 0a 20 2e 50 50 0a 20 54 68 69 73 20 TION. .PP. This
1980: 70 72 6f 63 65 64 75 72 65 20 67 65 6e 65 72 61 procedure genera
1990: 74 65 73 20 61 20 22 62 61 64 20 6f 70 74 69 6f tes a "bad optio
19a0: 6e 22 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 n" error message
19b0: 20 69 6e 20 61 6e 0a 49 6e 64 65 78 3a 20 67 65 in an.Index: ge
19c0: 6e 65 72 69 63 2f 74 63 6c 2e 64 65 63 6c 73 0a neric/tcl.decls.
19d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
19e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
19f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1a10: 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 ===.RCS file: /c
1a20: 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 vsroot/tcl/tcl/g
1a30: 65 6e 65 72 69 63 2f 74 63 6c 2e 64 65 63 6c 73 eneric/tcl.decls
1a40: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 ,v.retrieving re
1a50: 76 69 73 69 6f 6e 20 31 2e 31 30 37 0a 64 69 66 vision 1.107.dif
1a60: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 31 30 37 20 f -w -u -r1.107
1a70: 74 63 6c 2e 64 65 63 6c 73 0a 2d 2d 2d 20 67 65 tcl.decls.--- ge
1a80: 6e 65 72 69 63 2f 74 63 6c 2e 64 65 63 6c 73 09 neric/tcl.decls.
1a90: 32 31 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 32 21 Jan 2005 22:2
1aa0: 35 3a 30 38 20 2d 30 30 30 30 09 31 2e 31 30 37 5:08 -0000.1.107
1ab0: 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c .+++ generic/tcl
1ac0: 2e 64 65 63 6c 73 09 32 36 20 4a 61 6e 20 32 30 .decls.26 Jan 20
1ad0: 30 35 20 32 33 3a 33 36 3a 35 30 20 2d 30 30 30 05 23:36:50 -000
1ae0: 30 0a 40 40 20 2d 31 39 38 34 2c 37 20 2b 31 39 0.@@ -1984,7 +19
1af0: 38 34 2c 31 30 20 40 40 0a 20 09 20 20 20 20 54 84,10 @@. . T
1b00: 63 6c 5f 53 63 61 6c 65 54 69 6d 65 50 72 6f 63 cl_ScaleTimeProc
1b10: 2a 2a 20 73 63 61 6c 65 50 72 6f 63 2c 0a 20 09 ** scaleProc,. .
1b20: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 2a 20 ClientData*
1b30: 63 6c 69 65 6e 74 44 61 74 61 29 0a 20 7d 0a 2d clientData). }.-
1b40: 0a 2b 23 20 54 49 50 23 32 31 38 20 28 44 72 69 .+# TIP#218 (Dri
1b50: 76 65 72 20 54 68 72 65 61 64 20 41 63 74 69 6f ver Thread Actio
1b60: 6e 73 29 20 64 61 76 79 67 72 76 79 2f 61 6b 75 ns) davygrvy/aku
1b70: 70 72 69 65 73 20 43 68 61 6e 6e 65 6c 54 79 70 pries ChannelTyp
1b80: 65 20 76 65 72 20 34 0a 2b 64 65 63 6c 61 72 65 e ver 4.+declare
1b90: 20 35 35 34 20 67 65 6e 65 72 69 63 20 7b 0a 2b 554 generic {.+
1ba0: 20 20 20 20 54 63 6c 5f 44 72 69 76 65 72 54 68 Tcl_DriverTh
1bb0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a readActionProc *
1bc0: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 Tcl_ChannelThrea
1bd0: 64 41 63 74 69 6f 6e 50 72 6f 63 28 54 63 6c 5f dActionProc(Tcl_
1be0: 43 68 61 6e 6e 65 6c 54 79 70 65 20 2a 63 68 61 ChannelType *cha
1bf0: 6e 54 79 70 65 50 74 72 29 0a 2b 7d 0a 20 0a 20 nTypePtr).+}. .
1c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
1c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
1c20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
1c30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
1c40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 ##############.
1c50: 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f .Index: generic/
1c60: 74 63 6c 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d tcl.h.==========
1c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1c90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
1ca0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 =========.RCS fi
1cb0: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c le: /cvsroot/tcl
1cc0: 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c /tcl/generic/tcl
1cd0: 2e 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 .h,v.retrieving
1ce0: 72 65 76 69 73 69 6f 6e 20 31 2e 31 39 35 0a 64 revision 1.195.d
1cf0: 69 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 31 39 iff -w -u -r1.19
1d00: 35 20 74 63 6c 2e 68 0a 2d 2d 2d 20 67 65 6e 65 5 tcl.h.--- gene
1d10: 72 69 63 2f 74 63 6c 2e 68 09 32 31 20 4a 61 6e ric/tcl.h.21 Jan
1d20: 20 32 30 30 35 20 32 32 3a 32 35 3a 30 39 20 2d 2005 22:25:09 -
1d30: 30 30 30 30 09 31 2e 31 39 35 0a 2b 2b 2b 20 67 0000.1.195.+++ g
1d40: 65 6e 65 72 69 63 2f 74 63 6c 2e 68 09 32 36 20 eneric/tcl.h.26
1d50: 4a 61 6e 20 32 30 30 35 20 32 33 3a 33 36 3a 35 Jan 2005 23:36:5
1d60: 30 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 36 30 0 -0000.@@ -1460
1d70: 2c 36 20 2b 31 34 36 30 2c 31 34 20 40 40 0a 20 ,6 +1460,14 @@.
1d80: 23 64 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e #define TCL_CHAN
1d90: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 31 09 28 28 NEL_VERSION_1.((
1da0: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 56 Tcl_ChannelTypeV
1db0: 65 72 73 69 6f 6e 29 20 30 78 31 29 0a 20 23 64 ersion) 0x1). #d
1dc0: 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 efine TCL_CHANNE
1dd0: 4c 5f 56 45 52 53 49 4f 4e 5f 32 09 28 28 54 63 L_VERSION_2.((Tc
1de0: 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 56 65 72 l_ChannelTypeVer
1df0: 73 69 6f 6e 29 20 30 78 32 29 0a 20 23 64 65 66 sion) 0x2). #def
1e00: 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f ine TCL_CHANNEL_
1e10: 56 45 52 53 49 4f 4e 5f 33 09 28 28 54 63 6c 5f VERSION_3.((Tcl_
1e20: 43 68 61 6e 6e 65 6c 54 79 70 65 56 65 72 73 69 ChannelTypeVersi
1e30: 6f 6e 29 20 30 78 33 29 0a 2b 23 64 65 66 69 6e on) 0x3).+#defin
1e40: 65 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 e TCL_CHANNEL_VE
1e50: 52 53 49 4f 4e 5f 34 09 28 28 54 63 6c 5f 43 68 RSION_4.((Tcl_Ch
1e60: 61 6e 6e 65 6c 54 79 70 65 56 65 72 73 69 6f 6e annelTypeVersion
1e70: 29 20 30 78 34 29 0a 2b 0a 2b 2f 2a 0a 2b 20 2a ) 0x4).+.+/*.+ *
1e80: 20 54 49 50 20 23 32 31 38 3a 20 43 68 61 6e 6e TIP #218: Chann
1e90: 65 6c 20 41 63 74 69 6f 6e 73 2c 20 49 64 73 20 el Actions, Ids
1ea0: 66 6f 72 20 54 63 6c 5f 44 72 69 76 65 72 54 68 for Tcl_DriverTh
1eb0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 0a 2b readActionProc.+
1ec0: 20 2a 2f 0a 2b 0a 2b 23 64 65 66 69 6e 65 20 54 */.+.+#define T
1ed0: 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41 CL_CHANNEL_THREA
1ee0: 44 5f 49 4e 53 45 52 54 20 28 30 29 0a 2b 23 64 D_INSERT (0).+#d
1ef0: 65 66 69 6e 65 20 54 43 4c 5f 43 48 41 4e 4e 45 efine TCL_CHANNE
1f00: 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f 56 45 20 L_THREAD_REMOVE
1f10: 28 31 29 0a 20 0a 20 2f 2a 0a 20 20 2a 20 54 79 (1). . /*. * Ty
1f20: 70 65 64 65 66 73 20 66 6f 72 20 74 68 65 20 76 pedefs for the v
1f30: 61 72 69 6f 75 73 20 6f 70 65 72 61 74 69 6f 6e arious operation
1f40: 73 20 69 6e 20 61 20 63 68 61 6e 6e 65 6c 20 74 s in a channel t
1f50: 79 70 65 3a 0a 40 40 20 2d 31 34 39 35 2c 36 20 ype:.@@ -1495,6
1f60: 2b 31 35 30 33 2c 39 20 40 40 0a 20 09 09 20 20 +1503,9 @@. ..
1f70: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 ClientData ins
1f80: 74 61 6e 63 65 44 61 74 61 2c 20 54 63 6c 5f 57 tanceData, Tcl_W
1f90: 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c 0a 20 ideInt offset,.
1fa0: 09 09 20 20 20 20 69 6e 74 20 6d 6f 64 65 2c 20 .. int mode,
1fb0: 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50 74 int *errorCodePt
1fc0: 72 29 29 3b 0a 20 0a 2b 2f 2a 20 54 49 50 20 23 r));. .+/* TIP #
1fd0: 32 31 38 2c 20 43 68 61 6e 6e 65 6c 20 54 68 72 218, Channel Thr
1fe0: 65 61 64 20 41 63 74 69 6f 6e 73 20 2a 2f 0a 2b ead Actions */.+
1ff0: 74 79 70 65 64 65 66 20 76 6f 69 64 20 20 20 20 typedef void
2000: 20 28 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 (Tcl_DriverThre
2010: 61 64 41 63 74 69 6f 6e 50 72 6f 63 29 20 5f 41 adActionProc) _A
2020: 4e 53 49 5f 41 52 47 53 5f 20 28 28 0a 2b 09 09 NSI_ARGS_ ((.+..
2030: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 ClientData i
2040: 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 69 6e 74 nstanceData, int
2050: 20 61 63 74 69 6f 6e 29 29 3b 0a 20 0a 20 2f 2a action));. . /*
2060: 0a 20 20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 . * The followi
2070: 6e 67 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 ng declarations
2080: 65 69 74 68 65 72 20 6d 61 70 20 63 6b 61 6c 6c either map ckall
2090: 6f 63 20 61 6e 64 20 63 6b 66 72 65 65 20 74 6f oc and ckfree to
20a0: 0a 40 40 20 2d 31 35 38 35 2c 36 20 2b 31 35 39 .@@ -1585,6 +159
20b0: 36 2c 31 36 20 40 40 0a 20 09 09 09 09 09 20 2a 6,16 @@. ..... *
20c0: 20 68 61 6e 64 6c 65 20 36 34 2d 62 69 74 20 6f handle 64-bit o
20d0: 66 66 73 65 74 73 2e 20 4d 61 79 20 62 65 0a 20 ffsets. May be.
20e0: 09 09 09 09 09 20 2a 20 4e 55 4c 4c 2c 20 61 6e ..... * NULL, an
20f0: 64 20 6d 75 73 74 20 62 65 20 4e 55 4c 4c 20 69 d must be NULL i
2100: 66 0a 20 09 09 09 09 09 20 2a 20 73 65 65 6b 50 f. ..... * seekP
2110: 72 6f 63 20 69 73 20 4e 55 4c 4c 2e 20 2a 2f 0a roc is NULL. */.
2120: 2b 0a 2b 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 +.+ /*.+
2130: 20 20 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 * Only valid i
2140: 6e 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 n TCL_CHANNEL_VE
2150: 52 53 49 4f 4e 5f 34 20 63 68 61 6e 6e 65 6c 73 RSION_4 channels
2160: 20 6f 72 20 6c 61 74 65 72 0a 2b 20 20 20 20 20 or later.+
2170: 20 2a 20 54 49 50 20 23 32 31 38 2c 20 43 68 61 * TIP #218, Cha
2180: 6e 6e 65 6c 20 54 68 72 65 61 64 20 41 63 74 69 nnel Thread Acti
2190: 6f 6e 73 0a 2b 20 20 20 20 20 20 2a 2f 0a 2b 20 ons.+ */.+
21a0: 20 20 20 20 54 63 6c 5f 44 72 69 76 65 72 54 68 Tcl_DriverTh
21b0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2a readActionProc *
21c0: 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 threadActionProc
21d0: 3b 0a 2b 20 09 09 09 09 09 2f 2a 20 50 72 6f 63 ;.+ ...../* Proc
21e0: 65 64 75 72 65 20 74 6f 20 63 61 6c 6c 20 74 6f edure to call to
21f0: 20 6e 6f 74 69 66 79 0a 2b 20 09 09 09 09 09 20 notify.+ .....
2200: 2a 20 74 68 65 20 64 72 69 76 65 72 20 6f 66 20 * the driver of
2210: 74 68 72 65 61 64 20 73 70 65 63 69 66 69 63 0a thread specific.
2220: 2b 20 09 09 09 09 09 20 2a 20 61 63 74 69 76 69 + ..... * activi
2230: 74 79 20 66 6f 72 20 61 20 63 68 61 6e 6e 65 6c ty for a channel
2240: 2e 0a 2b 09 09 09 09 09 20 2a 20 4d 61 79 20 62 ..+..... * May b
2250: 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 7d 20 54 63 e NULL. */. } Tc
2260: 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 3b 0a 20 l_ChannelType;.
2270: 0a 20 2f 2a 0a 49 6e 64 65 78 3a 20 67 65 6e 65 . /*.Index: gene
2280: 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e 68 0a 3d ric/tclDecls.h.=
2290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
22d0: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 ==.RCS file: /cv
22e0: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 sroot/tcl/tcl/ge
22f0: 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e 68 neric/tclDecls.h
2300: 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 ,v.retrieving re
2310: 76 69 73 69 6f 6e 20 31 2e 31 30 39 0a 64 69 66 vision 1.109.dif
2320: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 31 30 39 20 f -w -u -r1.109
2330: 74 63 6c 44 65 63 6c 73 2e 68 0a 2d 2d 2d 20 67 tclDecls.h.--- g
2340: 65 6e 65 72 69 63 2f 74 63 6c 44 65 63 6c 73 2e eneric/tclDecls.
2350: 68 09 32 31 20 4a 61 6e 20 32 30 30 35 20 32 32 h.21 Jan 2005 22
2360: 3a 32 35 3a 31 31 20 2d 30 30 30 30 09 31 2e 31 :25:11 -0000.1.1
2370: 30 39 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 09.+++ generic/t
2380: 63 6c 44 65 63 6c 73 2e 68 09 32 36 20 4a 61 6e clDecls.h.26 Jan
2390: 20 32 30 30 35 20 32 33 3a 33 36 3a 35 30 20 2d 2005 23:36:50 -
23a0: 30 30 30 30 0a 40 40 20 2d 33 34 35 32 2c 36 20 0000.@@ -3452,6
23b0: 2b 33 34 35 32 2c 31 32 20 40 40 0a 20 09 09 09 +3452,12 @@. ...
23c0: 09 54 63 6c 5f 53 63 61 6c 65 54 69 6d 65 50 72 .Tcl_ScaleTimePr
23d0: 6f 63 2a 2a 20 73 63 61 6c 65 50 72 6f 63 2c 20 oc** scaleProc,
23e0: 0a 20 09 09 09 09 43 6c 69 65 6e 74 44 61 74 61 . ....ClientData
23f0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 0a * clientData));.
2400: 20 23 65 6e 64 69 66 0a 2b 23 69 66 6e 64 65 66 #endif.+#ifndef
2410: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 Tcl_ChannelThre
2420: 61 64 41 63 74 69 6f 6e 50 72 6f 63 5f 54 43 4c adActionProc_TCL
2430: 5f 44 45 43 4c 41 52 45 44 0a 2b 23 64 65 66 69 _DECLARED.+#defi
2440: 6e 65 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 ne Tcl_ChannelTh
2450: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 5f 54 readActionProc_T
2460: 43 4c 5f 44 45 43 4c 41 52 45 44 0a 2b 2f 2a 20 CL_DECLARED.+/*
2470: 35 35 34 20 2a 2f 0a 2b 45 58 54 45 52 4e 20 54 554 */.+EXTERN T
2480: 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64 41 cl_DriverThreadA
2490: 63 74 69 6f 6e 50 72 6f 63 20 2a 20 54 63 6c 5f ctionProc * Tcl_
24a0: 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 ChannelThreadAct
24b0: 69 6f 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 ionProc _ANSI_AR
24c0: 47 53 5f 28 28 0a 2b 09 09 09 09 54 63 6c 5f 43 GS_((.+....Tcl_C
24d0: 68 61 6e 6e 65 6c 54 79 70 65 20 2a 20 63 68 61 hannelType * cha
24e0: 6e 54 79 70 65 50 74 72 29 29 3b 0a 2b 23 65 6e nTypePtr));.+#en
24f0: 64 69 66 0a 20 0a 20 74 79 70 65 64 65 66 20 73 dif. . typedef s
2500: 74 72 75 63 74 20 54 63 6c 53 74 75 62 48 6f 6f truct TclStubHoo
2510: 6b 73 20 7b 0a 20 20 20 20 20 73 74 72 75 63 74 ks {. struct
2520: 20 54 63 6c 50 6c 61 74 53 74 75 62 73 20 2a 74 TclPlatStubs *t
2530: 63 6c 50 6c 61 74 53 74 75 62 73 3b 0a 40 40 20 clPlatStubs;.@@
2540: 2d 34 30 34 37 2c 36 20 2b 34 30 35 33 2c 37 20 -4047,6 +4053,7
2550: 40 40 0a 20 20 20 20 20 69 6e 74 20 28 2a 74 63 @@. int (*tc
2560: 6c 5f 47 65 74 45 6e 73 65 6d 62 6c 65 4e 61 6d l_GetEnsembleNam
2570: 65 73 70 61 63 65 29 20 5f 41 4e 53 49 5f 41 52 espace) _ANSI_AR
2580: 47 53 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 GS_((Tcl_Interp
2590: 2a 20 69 6e 74 65 72 70 2c 20 54 63 6c 5f 43 6f * interp, Tcl_Co
25a0: 6d 6d 61 6e 64 20 74 6f 6b 65 6e 2c 20 54 63 6c mmand token, Tcl
25b0: 5f 4e 61 6d 65 73 70 61 63 65 20 2a 2a 20 6e 61 _Namespace ** na
25c0: 6d 65 73 70 61 63 65 50 74 72 50 74 72 29 29 3b mespacePtrPtr));
25d0: 20 2f 2a 20 35 35 31 20 2a 2f 0a 20 20 20 20 20 /* 551 */.
25e0: 76 6f 69 64 20 28 2a 74 63 6c 5f 53 65 74 54 69 void (*tcl_SetTi
25f0: 6d 65 50 72 6f 63 29 20 5f 41 4e 53 49 5f 41 52 meProc) _ANSI_AR
2600: 47 53 5f 28 28 54 63 6c 5f 47 65 74 54 69 6d 65 GS_((Tcl_GetTime
2610: 50 72 6f 63 2a 20 67 65 74 50 72 6f 63 2c 20 54 Proc* getProc, T
2620: 63 6c 5f 53 63 61 6c 65 54 69 6d 65 50 72 6f 63 cl_ScaleTimeProc
2630: 2a 20 73 63 61 6c 65 50 72 6f 63 2c 20 43 6c 69 * scaleProc, Cli
2640: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
2650: 74 61 29 29 3b 20 2f 2a 20 35 35 32 20 2a 2f 0a ta)); /* 552 */.
2660: 20 20 20 20 20 76 6f 69 64 20 28 2a 74 63 6c 5f void (*tcl_
2670: 51 75 65 72 79 54 69 6d 65 50 72 6f 63 29 20 5f QueryTimeProc) _
2680: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f ANSI_ARGS_((Tcl_
2690: 47 65 74 54 69 6d 65 50 72 6f 63 2a 2a 20 67 65 GetTimeProc** ge
26a0: 74 50 72 6f 63 2c 20 54 63 6c 5f 53 63 61 6c 65 tProc, Tcl_Scale
26b0: 54 69 6d 65 50 72 6f 63 2a 2a 20 73 63 61 6c 65 TimeProc** scale
26c0: 50 72 6f 63 2c 20 43 6c 69 65 6e 74 44 61 74 61 Proc, ClientData
26d0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 29 29 3b 20 * clientData));
26e0: 2f 2a 20 35 35 33 20 2a 2f 0a 2b 20 20 20 20 54 /* 553 */.+ T
26f0: 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64 41 cl_DriverThreadA
2700: 63 74 69 6f 6e 50 72 6f 63 20 2a 20 28 2a 74 63 ctionProc * (*tc
2710: 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 l_ChannelThreadA
2720: 63 74 69 6f 6e 50 72 6f 63 29 20 5f 41 4e 53 49 ctionProc) _ANSI
2730: 5f 41 52 47 53 5f 28 28 54 63 6c 5f 43 68 61 6e _ARGS_((Tcl_Chan
2740: 6e 65 6c 54 79 70 65 20 2a 20 63 68 61 6e 54 79 nelType * chanTy
2750: 70 65 50 74 72 29 29 3b 20 2f 2a 20 35 35 34 20 pePtr)); /* 554
2760: 2a 2f 0a 20 7d 20 54 63 6c 53 74 75 62 73 3b 0a */. } TclStubs;.
2770: 20 0a 20 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 . #ifdef __cplu
2780: 73 70 6c 75 73 0a 40 40 20 2d 36 33 30 33 2c 36 splus.@@ -6303,6
2790: 20 2b 36 33 31 30 2c 31 30 20 40 40 0a 20 23 64 +6310,10 @@. #d
27a0: 65 66 69 6e 65 20 54 63 6c 5f 51 75 65 72 79 54 efine Tcl_QueryT
27b0: 69 6d 65 50 72 6f 63 20 5c 0a 20 09 28 74 63 6c imeProc \. .(tcl
27c0: 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f 51 75 StubsPtr->tcl_Qu
27d0: 65 72 79 54 69 6d 65 50 72 6f 63 29 20 2f 2a 20 eryTimeProc) /*
27e0: 35 35 33 20 2a 2f 0a 20 23 65 6e 64 69 66 0a 2b 553 */. #endif.+
27f0: 23 69 66 6e 64 65 66 20 54 63 6c 5f 43 68 61 6e #ifndef Tcl_Chan
2800: 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 nelThreadActionP
2810: 72 6f 63 0a 2b 23 64 65 66 69 6e 65 20 54 63 6c roc.+#define Tcl
2820: 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 _ChannelThreadAc
2830: 74 69 6f 6e 50 72 6f 63 20 5c 0a 2b 09 28 74 63 tionProc \.+.(tc
2840: 6c 53 74 75 62 73 50 74 72 2d 3e 74 63 6c 5f 43 lStubsPtr->tcl_C
2850: 68 61 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 hannelThreadActi
2860: 6f 6e 50 72 6f 63 29 20 2f 2a 20 35 35 34 20 2a onProc) /* 554 *
2870: 2f 0a 2b 23 65 6e 64 69 66 0a 20 0a 20 23 65 6e /.+#endif. . #en
2880: 64 69 66 20 2f 2a 20 64 65 66 69 6e 65 64 28 55 dif /* defined(U
2890: 53 45 5f 54 43 4c 5f 53 54 55 42 53 29 20 26 26 SE_TCL_STUBS) &&
28a0: 20 21 64 65 66 69 6e 65 64 28 55 53 45 5f 54 43 !defined(USE_TC
28b0: 4c 5f 53 54 55 42 5f 50 52 4f 43 53 29 20 2a 2f L_STUB_PROCS) */
28c0: 0a 20 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 . .Index: generi
28d0: 63 2f 74 63 6c 49 4f 2e 63 0a 3d 3d 3d 3d 3d 3d c/tclIO.c.======
28e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
28f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2900: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
2910: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 =============.RC
2920: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 S file: /cvsroot
2930: 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 /tcl/tcl/generic
2940: 2f 74 63 6c 49 4f 2e 63 2c 76 0a 72 65 74 72 69 /tclIO.c,v.retri
2950: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
2960: 2e 38 31 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d .81.diff -w -u -
2970: 72 31 2e 38 31 20 74 63 6c 49 4f 2e 63 0a 2d 2d r1.81 tclIO.c.--
2980: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 4f 2e - generic/tclIO.
2990: 63 09 33 30 20 4e 6f 76 20 32 30 30 34 20 31 39 c.30 Nov 2004 19
29a0: 3a 33 34 3a 34 37 20 2d 30 30 30 30 09 31 2e 38 :34:47 -0000.1.8
29b0: 31 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 1.+++ generic/tc
29c0: 6c 49 4f 2e 63 09 32 36 20 4a 61 6e 20 32 30 30 lIO.c.26 Jan 200
29d0: 35 20 32 33 3a 33 36 3a 35 30 20 2d 30 30 30 30 5 23:36:50 -0000
29e0: 0a 40 40 20 2d 31 32 30 35 2c 31 38 20 2b 31 32 .@@ -1205,18 +12
29f0: 30 35 2c 31 39 20 40 40 0a 20 20 20 20 20 20 2a 05,19 @@. *
2a00: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 6e 20 in the list on
2a10: 65 78 69 74 2e 0a 20 20 20 20 20 20 2a 0a 20 20 exit.. *.
2a20: 20 20 20 20 2a 20 4a 48 3a 20 43 6f 75 6c 64 20 * JH: Could
2a30: 63 61 6c 6c 20 54 63 6c 5f 53 70 6c 69 63 65 43 call Tcl_SpliceC
2a40: 68 61 6e 6e 65 6c 2c 20 62 75 74 20 6e 65 65 64 hannel, but need
2a50: 20 74 6f 20 61 76 6f 69 64 20 4e 55 4c 4c 20 63 to avoid NULL c
2a60: 68 65 63 6b 2e 0a 2b 20 20 20 20 20 2a 0a 2b 20 heck..+ *.+
2a70: 20 20 20 20 2a 20 54 49 50 20 23 32 31 38 2e 0a * TIP #218..
2a80: 2b 20 20 20 20 20 2a 20 41 4b 3a 20 4a 75 73 74 + * AK: Just
2a90: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 initialize the
2aa0: 66 69 65 6c 64 20 74 6f 20 4e 55 4c 4c 20 62 65 field to NULL be
2ab0: 66 6f 72 65 20 69 6e 76 6f 6b 69 6e 67 20 54 63 fore invoking Tc
2ac0: 6c 5f 53 70 6c 69 63 65 43 68 61 6e 6e 65 6c 0a l_SpliceChannel.
2ad0: 2b 20 20 20 20 20 2a 20 20 20 20 20 57 65 20 6e + * We n
2ae0: 65 65 64 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 eed Tcl_SpliceCh
2af0: 61 6e 6e 65 6c 2c 20 66 6f 72 20 74 68 65 20 74 annel, for the t
2b00: 68 72 65 61 64 41 63 74 69 6f 6e 20 63 61 6c 6c hreadAction call
2b10: 73 2e 0a 2b 20 20 20 20 20 2a 20 20 20 20 20 54 s..+ * T
2b20: 68 65 72 65 20 69 73 20 6e 6f 20 72 65 61 6c 20 here is no real
2b30: 72 65 61 73 6f 6e 20 74 6f 20 64 75 70 6c 69 63 reason to duplic
2b40: 61 74 65 20 61 6c 6c 20 6f 66 20 74 68 69 73 2e ate all of this.
2b50: 0a 2b 20 20 20 20 20 2a 20 4e 4f 54 45 3a 20 41 .+ * NOTE: A
2b60: 6c 6c 20 64 72 69 76 65 72 73 20 75 73 69 6e 67 ll drivers using
2b70: 20 74 68 72 65 61 64 20 61 63 74 69 6f 6e 73 20 thread actions
2b80: 6e 6f 77 20 68 61 76 65 20 74 6f 20 70 65 72 66 now have to perf
2b90: 6f 72 6d 20 74 68 65 69 72 20 54 53 44 0a 2b 20 orm their TSD.+
2ba0: 20 20 20 20 2a 20 20 20 20 20 20 20 6d 61 6e 69 * mani
2bb0: 70 75 6c 61 74 69 6f 6e 20 6f 6e 6c 79 20 69 6e pulation only in
2bc0: 20 74 68 65 69 72 20 74 68 72 65 61 64 20 61 63 their thread ac
2bd0: 74 69 6f 6e 20 70 72 6f 63 2e 20 44 6f 69 6e 67 tion proc. Doing
2be0: 20 69 74 20 77 68 65 6e 0a 2b 20 20 20 20 20 2a it when.+ *
2bf0: 20 20 20 20 20 20 20 63 72 65 61 74 69 6e 67 20 creating
2c00: 74 68 65 69 72 20 69 6e 73 74 61 6e 63 65 20 73 their instance s
2c10: 74 72 75 63 74 75 72 65 73 20 77 69 6c 6c 20 63 tructures will c
2c20: 6f 6c 6c 69 64 65 20 77 69 74 68 20 74 68 65 20 ollide with the
2c30: 74 68 72 65 61 64 0a 2b 20 20 20 20 20 2a 20 20 thread.+ *
2c40: 20 20 20 20 20 61 63 74 69 6f 6e 20 61 63 74 69 action acti
2c50: 76 69 74 79 20 61 6e 64 20 6c 65 61 64 20 74 6f vity and lead to
2c60: 20 64 61 6d 61 67 65 64 20 6c 69 73 74 73 2e 0a damaged lists..
2c70: 20 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 */. .-
2c80: 73 74 61 74 65 50 74 72 2d 3e 6e 65 78 74 43 53 statePtr->nextCS
2c90: 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 66 69 Ptr = tsdPtr->fi
2ca0: 72 73 74 43 53 50 74 72 3b 0a 2d 20 20 20 20 74 rstCSPtr;.- t
2cb0: 73 64 50 74 72 2d 3e 66 69 72 73 74 43 53 50 74 sdPtr->firstCSPt
2cc0: 72 20 3d 20 73 74 61 74 65 50 74 72 3b 0a 2d 0a r = statePtr;.-.
2cd0: 2d 20 20 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 - /*.- *
2ce0: 54 49 50 20 23 31 30 2e 20 4d 61 72 6b 20 74 68 TIP #10. Mark th
2cf0: 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 e current thread
2d00: 20 61 73 20 74 68 65 20 6f 6e 65 20 6d 61 6e 61 as the one mana
2d10: 67 69 6e 67 20 74 68 65 20 6e 65 77 0a 2d 20 20 ging the new.-
2d20: 20 20 20 2a 09 09 63 68 61 6e 6e 65 6c 2e 20 4e *..channel. N
2d30: 6f 74 65 3a 20 27 54 63 6c 5f 47 65 74 43 75 72 ote: 'Tcl_GetCur
2d40: 72 65 6e 74 54 68 72 65 61 64 27 20 72 65 74 75 rentThread' retu
2d50: 72 6e 73 20 73 65 6e 73 69 62 6c 65 0a 2d 20 20 rns sensible.-
2d60: 20 20 20 2a 09 09 76 61 6c 75 65 73 20 65 76 65 *..values eve
2d70: 6e 20 66 6f 72 20 61 20 6e 6f 6e 2d 74 68 72 65 n for a non-thre
2d80: 61 64 65 64 20 63 6f 72 65 2e 0a 2d 20 20 20 20 aded core..-
2d90: 20 2a 2f 0a 2d 0a 2d 20 20 20 20 73 74 61 74 65 */.-.- state
2da0: 50 74 72 2d 3e 6d 61 6e 61 67 69 6e 67 54 68 72 Ptr->managingThr
2db0: 65 61 64 20 3d 20 54 63 6c 5f 47 65 74 43 75 72 ead = Tcl_GetCur
2dc0: 72 65 6e 74 54 68 72 65 61 64 28 29 3b 0a 2b 20 rentThread();.+
2dd0: 20 20 20 73 74 61 74 65 50 74 72 2d 3e 6e 65 78 statePtr->nex
2de0: 74 43 53 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 tCSPtr = (Channe
2df0: 6c 53 74 61 74 65 20 2a 29 20 4e 55 4c 4c 3b 0a lState *) NULL;.
2e00: 2b 20 20 20 20 54 63 6c 5f 53 70 6c 69 63 65 43 + Tcl_SpliceC
2e10: 68 61 6e 6e 65 6c 20 28 28 54 63 6c 5f 43 68 61 hannel ((Tcl_Cha
2e20: 6e 6e 65 6c 29 20 63 68 61 6e 50 74 72 29 3b 0a nnel) chanPtr);.
2e30: 20 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 . /*.
2e40: 2a 20 49 6e 73 74 61 6c 6c 20 74 68 69 73 20 63 * Install this c
2e50: 68 61 6e 6e 65 6c 20 69 6e 20 74 68 65 20 66 69 hannel in the fi
2e60: 72 73 74 20 65 6d 70 74 79 20 73 74 61 6e 64 61 rst empty standa
2e70: 72 64 20 63 68 61 6e 6e 65 6c 20 73 6c 6f 74 2c rd channel slot,
2e80: 20 69 66 0a 40 40 20 2d 32 33 38 32 2c 37 20 2b if.@@ -2382,7 +
2e90: 32 33 38 33 2c 37 20 40 40 0a 20 20 2a 09 52 65 2383,7 @@. *.Re
2ea0: 73 65 74 73 20 74 68 65 20 66 69 65 6c 64 20 27 sets the field '
2eb0: 6e 65 78 74 43 53 50 74 72 27 20 6f 66 20 74 68 nextCSPtr' of th
2ec0: 65 20 73 70 65 63 69 66 69 65 64 20 63 68 61 6e e specified chan
2ed0: 6e 65 6c 20 73 74 61 74 65 20 74 6f 20 4e 55 4c nel state to NUL
2ee0: 4c 2e 0a 20 20 2a 0a 20 20 2a 20 4e 4f 54 45 3a L.. *. * NOTE:
2ef0: 0a 2d 20 2a 09 54 68 65 20 63 68 61 6e 6e 65 6c .- *.The channel
2f00: 20 74 6f 20 73 70 6c 69 63 65 20 6f 75 74 20 6f to splice out o
2f10: 66 20 74 68 65 20 6c 69 73 74 20 6d 75 73 74 20 f the list must
2f20: 6e 6f 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 not be reference
2f30: 64 0a 2b 20 2a 09 54 68 65 20 63 68 61 6e 6e 65 d.+ *.The channe
2f40: 6c 20 74 6f 20 63 75 74 20 6f 75 74 20 6f 66 20 l to cut out of
2f50: 74 68 65 20 6c 69 73 74 20 6d 75 73 74 20 6e 6f the list must no
2f60: 74 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 0a t be referenced.
2f70: 20 20 2a 09 69 6e 20 61 6e 79 20 69 6e 74 65 72 *.in any inter
2f80: 70 72 65 74 65 72 2e 20 54 68 69 73 20 69 73 20 preter. This is
2f90: 73 6f 6d 65 74 68 69 6e 67 20 74 68 69 73 20 70 something this p
2fa0: 72 6f 63 65 64 75 72 65 20 63 61 6e 6e 6f 74 0a rocedure cannot.
2fb0: 20 20 2a 09 63 68 65 63 6b 20 28 64 65 73 70 69 *.check (despi
2fc0: 74 65 20 74 68 65 20 72 65 66 63 6f 75 6e 74 29 te the refcount)
2fd0: 20 62 65 63 61 75 73 65 20 74 68 65 20 63 61 6c because the cal
2fe0: 6c 65 72 20 75 73 75 61 6c 6c 79 20 77 61 6e 74 ler usually want
2ff0: 73 0a 20 20 2a 09 66 69 64 64 6c 65 20 77 69 74 s. *.fiddle wit
3000: 68 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 28 6c h the channel (l
3010: 69 6b 65 20 74 72 61 6e 73 66 65 72 69 6e 67 20 ike transfering
3020: 69 74 20 74 6f 20 61 20 64 69 66 66 65 72 65 6e it to a differen
3030: 74 0a 40 40 20 2d 32 34 30 34 2c 36 20 2b 32 34 t.@@ -2404,6 +24
3040: 30 35 2c 37 20 40 40 0a 20 09 09 09 09 09 20 2a 05,7 @@. ..... *
3050: 20 63 68 61 6e 6e 65 6c 20 6f 75 74 20 6f 66 20 channel out of
3060: 74 68 65 20 6c 69 73 74 20 6f 6e 20 63 6c 6f 73 the list on clos
3070: 65 2e 20 2a 2f 0a 20 20 20 20 20 43 68 61 6e 6e e. */. Chann
3080: 65 6c 53 74 61 74 65 20 2a 73 74 61 74 65 50 74 elState *statePt
3090: 72 20 3d 20 28 28 43 68 61 6e 6e 65 6c 20 2a 29 r = ((Channel *)
30a0: 20 63 68 61 6e 29 2d 3e 73 74 61 74 65 3b 0a 20 chan)->state;.
30b0: 09 09 09 09 09 2f 2a 20 73 74 61 74 65 20 6f 66 ...../* state of
30c0: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 73 74 61 the channel sta
30d0: 63 6b 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f ck. */.+ Tcl_
30e0: 44 72 69 76 65 72 54 68 72 65 61 64 41 63 74 69 DriverThreadActi
30f0: 6f 6e 50 72 6f 63 20 2a 74 68 72 65 61 64 41 63 onProc *threadAc
3100: 74 69 6f 6e 50 72 6f 63 3b 0a 20 0a 20 20 20 20 tionProc;. .
3110: 20 2f 2a 0a 20 20 20 20 20 20 2a 20 52 65 6d 6f /*. * Remo
3120: 76 65 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 20 ve this channel
3130: 66 72 6f 6d 20 6f 66 20 74 68 65 20 6c 69 73 74 from of the list
3140: 20 6f 66 20 61 6c 6c 20 63 68 61 6e 6e 65 6c 73 of all channels
3150: 0a 40 40 20 2d 32 34 32 36 2c 38 20 2b 32 34 32 .@@ -2426,8 +242
3160: 38 2c 31 32 20 40 40 0a 20 0a 20 20 20 20 20 73 8,12 @@. . s
3170: 74 61 74 65 50 74 72 2d 3e 6e 65 78 74 43 53 50 tatePtr->nextCSP
3180: 74 72 20 3d 20 28 43 68 61 6e 6e 65 6c 53 74 61 tr = (ChannelSta
3190: 74 65 20 2a 29 20 4e 55 4c 4c 3b 0a 20 0a 2d 20 te *) NULL;. .-
31a0: 20 20 20 54 63 6c 70 43 75 74 46 69 6c 65 43 68 TclpCutFileCh
31b0: 61 6e 6e 65 6c 28 63 68 61 6e 29 3b 0a 2d 20 20 annel(chan);.-
31c0: 20 20 54 63 6c 70 43 75 74 53 6f 63 6b 43 68 61 TclpCutSockCha
31d0: 6e 6e 65 6c 28 63 68 61 6e 29 3b 0a 2b 20 20 20 nnel(chan);.+
31e0: 20 2f 2a 20 54 49 50 20 23 32 31 38 2c 20 43 68 /* TIP #218, Ch
31f0: 61 6e 6e 65 6c 20 54 68 72 65 61 64 20 41 63 74 annel Thread Act
3200: 69 6f 6e 73 20 2a 2f 0a 2b 20 20 20 20 74 68 72 ions */.+ thr
3210: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 3d 20 eadActionProc =
3220: 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 68 72 65 61 Tcl_ChannelThrea
3230: 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 54 63 6c dActionProc (Tcl
3240: 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70 65 20 _GetChannelType
3250: 28 63 68 61 6e 29 29 3b 0a 2b 20 20 20 20 69 66 (chan));.+ if
3260: 20 28 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 (threadActionPr
3270: 6f 63 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 20 oc != NULL) {.+
3280: 20 20 20 20 20 20 20 28 2a 74 68 72 65 61 64 41 (*threadA
3290: 63 74 69 6f 6e 50 72 6f 63 29 20 28 54 63 6c 5f ctionProc) (Tcl_
32a0: 47 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e GetChannelInstan
32b0: 63 65 44 61 74 61 28 63 68 61 6e 29 2c 0a 2b 09 ceData(chan),.+.
32c0: 09 09 20 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e .. TCL_CHANN
32d0: 45 4c 5f 54 48 52 45 41 44 5f 52 45 4d 4f 56 45 EL_THREAD_REMOVE
32e0: 29 3b 0a 2b 20 20 20 20 7d 0a 20 7d 0a 20 0c 0a );.+ }. }. ..
32f0: 20 2f 2a 0a 40 40 20 2d 32 34 34 36 2c 37 20 2b /*.@@ -2446,7 +
3300: 32 34 35 32 2c 37 20 40 40 0a 20 20 2a 09 4e 6f 2452,7 @@. *.No
3310: 74 68 69 6e 67 2e 0a 20 20 2a 0a 20 20 2a 20 4e thing.. *. * N
3320: 4f 54 45 3a 0a 2d 20 2a 09 54 68 65 20 63 68 61 OTE:.- *.The cha
3330: 6e 6e 65 6c 20 74 6f 20 61 64 64 20 74 6f 20 74 nnel to add to t
3340: 68 65 20 6c 69 73 74 20 6d 75 73 74 20 6e 6f 74 he list must not
3350: 20 62 65 20 72 65 66 65 72 65 6e 63 65 64 20 69 be referenced i
3360: 6e 20 61 6e 79 0a 2b 20 2a 09 54 68 65 20 63 68 n any.+ *.The ch
3370: 61 6e 6e 65 6c 20 74 6f 20 73 70 6c 69 63 65 20 annel to splice
3380: 69 6e 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 75 into the list mu
3390: 73 74 20 6e 6f 74 20 62 65 20 72 65 66 65 72 65 st not be refere
33a0: 6e 63 65 64 20 69 6e 20 61 6e 79 0a 20 20 2a 09 nced in any. *.
33b0: 69 6e 74 65 72 70 72 65 74 65 72 2e 20 54 68 69 interpreter. Thi
33c0: 73 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 74 s is something t
33d0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 63 61 his procedure ca
33e0: 6e 6e 6f 74 20 63 68 65 63 6b 0a 20 20 2a 09 28 nnot check. *.(
33f0: 64 65 73 70 69 74 65 20 74 68 65 20 72 65 66 63 despite the refc
3400: 6f 75 6e 74 29 20 62 65 63 61 75 73 65 20 74 68 ount) because th
3410: 65 20 63 61 6c 6c 65 72 20 75 73 75 61 6c 6c 79 e caller usually
3420: 20 77 61 6e 74 73 20 66 69 67 67 6c 65 0a 20 20 wants figgle.
3430: 2a 09 77 69 74 68 20 74 68 65 20 63 68 61 6e 6e *.with the chann
3440: 65 6c 20 28 6c 69 6b 65 20 74 72 61 6e 73 66 65 el (like transfe
3450: 72 69 6e 67 20 69 74 20 74 6f 20 61 20 64 69 66 ring it to a dif
3460: 66 65 72 65 6e 74 20 74 68 72 65 61 64 29 0a 40 ferent thread).@
3470: 40 20 2d 32 34 36 34 2c 36 20 2b 32 34 37 30 2c @ -2464,6 +2470,
3480: 37 20 40 40 0a 20 7b 0a 20 20 20 20 20 54 68 72 7 @@. {. Thr
3490: 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 20 eadSpecificData
34a0: 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f 54 53 *tsdPtr = TCL_TS
34b0: 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 79 29 D_INIT(&dataKey)
34c0: 3b 0a 20 20 20 20 20 43 68 61 6e 6e 65 6c 53 74 ;. ChannelSt
34d0: 61 74 65 20 2a 73 74 61 74 65 50 74 72 20 3d 20 ate *statePtr =
34e0: 28 28 43 68 61 6e 6e 65 6c 20 2a 29 20 63 68 61 ((Channel *) cha
34f0: 6e 29 2d 3e 73 74 61 74 65 3b 0a 2b 20 20 20 20 n)->state;.+
3500: 54 63 6c 5f 44 72 69 76 65 72 54 68 72 65 61 64 Tcl_DriverThread
3510: 41 63 74 69 6f 6e 50 72 6f 63 20 2a 74 68 72 65 ActionProc *thre
3520: 61 64 41 63 74 69 6f 6e 50 72 6f 63 3b 0a 20 0a adActionProc;. .
3530: 20 20 20 20 20 69 66 20 28 73 74 61 74 65 50 74 if (statePt
3540: 72 2d 3e 6e 65 78 74 43 53 50 74 72 20 21 3d 20 r->nextCSPtr !=
3550: 28 43 68 61 6e 6e 65 6c 53 74 61 74 65 20 2a 29 (ChannelState *)
3560: 20 4e 55 4c 4c 29 20 7b 0a 20 09 54 63 6c 5f 50 NULL) {. .Tcl_P
3570: 61 6e 69 63 28 22 54 63 6c 5f 53 70 6c 69 63 65 anic("Tcl_Splice
3580: 43 68 61 6e 6e 65 6c 3a 20 74 72 79 69 6e 67 20 Channel: trying
3590: 74 6f 20 61 64 64 20 63 68 61 6e 6e 65 6c 20 75 to add channel u
35a0: 73 65 64 20 69 6e 20 64 69 66 66 65 72 65 6e 74 sed in different
35b0: 20 6c 69 73 74 22 29 3b 0a 40 40 20 2d 32 34 38 list");.@@ -248
35c0: 30 2c 38 20 2b 32 34 38 37 2c 31 32 20 40 40 0a 0,8 +2487,12 @@.
35d0: 20 0a 20 20 20 20 20 73 74 61 74 65 50 74 72 2d . statePtr-
35e0: 3e 6d 61 6e 61 67 69 6e 67 54 68 72 65 61 64 20 >managingThread
35f0: 3d 20 54 63 6c 5f 47 65 74 43 75 72 72 65 6e 74 = Tcl_GetCurrent
3600: 54 68 72 65 61 64 28 29 3b 0a 20 0a 2d 20 20 20 Thread();. .-
3610: 20 54 63 6c 70 53 70 6c 69 63 65 46 69 6c 65 43 TclpSpliceFileC
3620: 68 61 6e 6e 65 6c 28 63 68 61 6e 29 3b 0a 2d 20 hannel(chan);.-
3630: 20 20 20 54 63 6c 70 53 70 6c 69 63 65 53 6f 63 TclpSpliceSoc
3640: 6b 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 3b 0a kChannel(chan);.
3650: 2b 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 + /* TIP #218
3660: 2c 20 43 68 61 6e 6e 65 6c 20 54 68 72 65 61 64 , Channel Thread
3670: 20 41 63 74 69 6f 6e 73 20 2a 2f 0a 2b 20 20 20 Actions */.+
3680: 20 74 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f threadActionPro
3690: 63 20 3d 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 c = Tcl_ChannelT
36a0: 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 hreadActionProc
36b0: 28 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 (Tcl_GetChannelT
36c0: 79 70 65 20 28 63 68 61 6e 29 29 3b 0a 2b 20 20 ype (chan));.+
36d0: 20 20 69 66 20 28 74 68 72 65 61 64 41 63 74 69 if (threadActi
36e0: 6f 6e 50 72 6f 63 20 21 3d 20 4e 55 4c 4c 29 20 onProc != NULL)
36f0: 7b 0a 2b 20 20 20 20 20 20 20 20 28 2a 74 68 72 {.+ (*thr
3700: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 29 20 28 eadActionProc) (
3710: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e Tcl_GetChannelIn
3720: 73 74 61 6e 63 65 44 61 74 61 28 63 68 61 6e 29 stanceData(chan)
3730: 2c 0a 2b 09 09 09 20 20 20 20 20 54 43 4c 5f 43 ,.+... TCL_C
3740: 48 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e HANNEL_THREAD_IN
3750: 53 45 52 54 29 3b 0a 2b 20 20 20 20 7d 0a 20 7d SERT);.+ }. }
3760: 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 38 39 35 33 . .. /*.@@ -8953
3770: 2c 36 20 2b 38 39 36 34 2c 38 20 40 40 0a 20 09 ,6 +8964,8 @@. .
3780: 72 65 74 75 72 6e 20 54 43 4c 5f 43 48 41 4e 4e return TCL_CHANN
3790: 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 3b 0a 20 20 EL_VERSION_2;.
37a0: 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 63 68 } else if (ch
37b0: 61 6e 54 79 70 65 50 74 72 2d 3e 76 65 72 73 69 anTypePtr->versi
37c0: 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 on == TCL_CHANNE
37d0: 4c 5f 56 45 52 53 49 4f 4e 5f 33 29 20 7b 0a 20 L_VERSION_3) {.
37e0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 43 48 41 4e .return TCL_CHAN
37f0: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 3b 0a 2b NEL_VERSION_3;.+
3800: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 63 } else if (c
3810: 68 61 6e 54 79 70 65 50 74 72 2d 3e 76 65 72 73 hanTypePtr->vers
3820: 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 4e 4e ion == TCL_CHANN
3830: 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 29 20 7b 0a EL_VERSION_4) {.
3840: 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 43 48 41 +.return TCL_CHA
3850: 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 34 3b 0a NNEL_VERSION_4;.
3860: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 09 } else {. .
3870: 2f 2a 0a 20 09 20 2a 20 49 6e 20 3c 76 32 20 63 /*. . * In <v2 c
3880: 68 61 6e 6e 65 6c 20 76 65 72 73 69 6f 6e 73 2c hannel versions,
3890: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 66 69 65 the version fie
38a0: 6c 64 20 69 73 20 6f 63 63 75 70 69 65 64 0a 40 ld is occupied.@
38b0: 40 20 2d 39 33 30 38 2c 36 20 2b 39 33 32 31 2c @ -9308,6 +9321,
38c0: 33 34 20 40 40 0a 20 20 20 20 20 7d 0a 20 7d 0a 34 @@. }. }.
38d0: 20 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d ..+/*.+ *------
38e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
38f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3920: 0a 2b 20 2a 0a 2b 20 2a 20 54 63 6c 5f 43 68 61 .+ *.+ * Tcl_Cha
3930: 6e 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e nnelThreadAction
3940: 50 72 6f 63 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 Proc --.+ *.+ *
3950: 20 20 20 20 20 54 49 50 20 23 32 31 38 2c 20 43 TIP #218, C
3960: 68 61 6e 6e 65 6c 20 54 68 72 65 61 64 20 41 63 hannel Thread Ac
3970: 74 69 6f 6e 73 2e 0a 2b 20 2a 09 52 65 74 75 72 tions..+ *.Retur
3980: 6e 20 74 68 65 20 54 63 6c 5f 44 72 69 76 65 72 n the Tcl_Driver
3990: 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 ThreadActionProc
39a0: 20 6f 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 of the channel
39b0: 74 79 70 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 type..+ *.+ * Re
39c0: 73 75 6c 74 73 3a 0a 2b 20 2a 09 41 20 70 6f 69 sults:.+ *.A poi
39d0: 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 6f 63 nter to the proc
39e0: 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 ..+ *.+ * Side e
39f0: 66 66 65 63 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 ffects:.+ *.None
3a00: 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d ..+ *.+ *-------
3a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
3a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
3a50: 2b 20 2a 2f 0a 2b 0a 2b 54 63 6c 5f 44 72 69 76 + */.+.+Tcl_Driv
3a60: 65 72 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 erThreadActionPr
3a70: 6f 63 20 2a 0a 2b 54 63 6c 5f 43 68 61 6e 6e 65 oc *.+Tcl_Channe
3a80: 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f lThreadActionPro
3a90: 63 28 63 68 61 6e 54 79 70 65 50 74 72 29 0a 2b c(chanTypePtr).+
3aa0: 20 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 Tcl_ChannelT
3ab0: 79 70 65 20 2a 63 68 61 6e 54 79 70 65 50 74 72 ype *chanTypePtr
3ac0: 3b 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 ;./* Pointer to
3ad0: 63 68 61 6e 6e 65 6c 20 74 79 70 65 2e 20 2a 2f channel type. */
3ae0: 0a 2b 7b 0a 2b 20 20 20 20 69 66 20 28 48 61 76 .+{.+ if (Hav
3af0: 65 56 65 72 73 69 6f 6e 28 63 68 61 6e 54 79 70 eVersion(chanTyp
3b00: 65 50 74 72 2c 20 54 43 4c 5f 43 48 41 4e 4e 45 ePtr, TCL_CHANNE
3b10: 4c 5f 56 45 52 53 49 4f 4e 5f 34 29 29 20 7b 0a L_VERSION_4)) {.
3b20: 2b 09 72 65 74 75 72 6e 20 63 68 61 6e 54 79 70 +.return chanTyp
3b30: 65 50 74 72 2d 3e 74 68 72 65 61 64 41 63 74 69 ePtr->threadActi
3b40: 6f 6e 50 72 6f 63 3b 0a 2b 20 20 20 20 7d 20 65 onProc;.+ } e
3b50: 6c 73 65 20 7b 0a 2b 09 72 65 74 75 72 6e 20 4e lse {.+.return N
3b60: 55 4c 4c 3b 0a 2b 20 20 20 20 7d 0a 2b 7d 0a 2b ULL;.+ }.+}.+
3b70: 0c 0a 20 23 69 66 20 30 0a 20 2f 2a 0a 20 20 2a .. #if 0. /*. *
3b80: 20 46 6f 72 20 66 75 74 75 72 65 20 64 65 62 75 For future debu
3b90: 67 67 69 6e 67 20 77 6f 72 6b 2c 20 61 20 73 69 gging work, a si
3ba0: 6d 70 6c 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f mple function to
3bb0: 20 70 72 69 6e 74 20 74 68 65 20 66 6c 61 67 73 print the flags
3bc0: 20 6f 66 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 of.Index: gener
3bd0: 69 63 2f 74 63 6c 49 6e 74 2e 68 0a 3d 3d 3d 3d ic/tclInt.h.====
3be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
3c20: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f RCS file: /cvsro
3c30: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 ot/tcl/tcl/gener
3c40: 69 63 2f 74 63 6c 49 6e 74 2e 68 2c 76 0a 72 65 ic/tclInt.h,v.re
3c50: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f trieving revisio
3c60: 6e 20 31 2e 32 31 33 0a 64 69 66 66 20 2d 77 20 n 1.213.diff -w
3c70: 2d 75 20 2d 72 31 2e 32 31 33 20 74 63 6c 49 6e -u -r1.213 tclIn
3c80: 74 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f t.h.--- generic/
3c90: 74 63 6c 49 6e 74 2e 68 09 32 31 20 4a 61 6e 20 tclInt.h.21 Jan
3ca0: 32 30 30 35 20 32 32 3a 32 35 3a 31 38 20 2d 30 2005 22:25:18 -0
3cb0: 30 30 30 09 31 2e 32 31 33 0a 2b 2b 2b 20 67 65 000.1.213.+++ ge
3cc0: 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 09 32 neric/tclInt.h.2
3cd0: 36 20 4a 61 6e 20 32 30 30 35 20 32 33 3a 33 36 6 Jan 2005 23:36
3ce0: 3a 35 30 20 2d 30 30 30 30 0a 40 40 20 2d 31 39 :50 -0000.@@ -19
3cf0: 37 37 2c 31 30 20 2b 31 39 37 37 2c 36 20 40 40 77,10 +1977,6 @@
3d00: 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 . MODULE_SCOPE i
3d10: 6e 74 09 54 63 6c 70 4f 62 6a 43 68 64 69 72 20 nt.TclpObjChdir
3d20: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c _ANSI_ARGS_((Tcl
3d30: 5f 4f 62 6a 20 2a 70 61 74 68 50 74 72 29 29 3b _Obj *pathPtr));
3d40: 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 54 . MODULE_SCOPE T
3d50: 63 6c 5f 4f 62 6a 20 2a 09 54 63 6c 50 61 74 68 cl_Obj *.TclPath
3d60: 50 61 72 74 20 5f 41 4e 53 49 5f 41 52 47 53 5f Part _ANSI_ARGS_
3d70: 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e ((Tcl_Interp *in
3d80: 74 65 72 70 2c 20 0a 20 09 09 09 20 20 20 20 54 terp, . ... T
3d90: 63 6c 5f 4f 62 6a 20 2a 70 61 74 68 50 74 72 2c cl_Obj *pathPtr,
3da0: 20 54 63 6c 5f 50 61 74 68 50 61 72 74 20 70 6f Tcl_PathPart po
3db0: 72 74 69 6f 6e 29 29 3b 0a 2d 4d 4f 44 55 4c 45 rtion));.-MODULE
3dc0: 5f 53 43 4f 50 45 20 76 6f 69 64 09 54 63 6c 70 _SCOPE void.Tclp
3dd0: 43 75 74 46 69 6c 65 43 68 61 6e 6e 65 6c 20 5f CutFileChannel _
3de0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f ANSI_ARGS_((Tcl_
3df0: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 29 29 3b 0a Channel chan));.
3e00: 2d 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f -MODULE_SCOPE vo
3e10: 69 64 09 54 63 6c 70 43 75 74 53 6f 63 6b 43 68 id.TclpCutSockCh
3e20: 61 6e 6e 65 6c 20 5f 41 4e 53 49 5f 41 52 47 53 annel _ANSI_ARGS
3e30: 5f 28 28 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 _((Tcl_Channel c
3e40: 68 61 6e 29 29 3b 0a 2d 4d 4f 44 55 4c 45 5f 53 han));.-MODULE_S
3e50: 43 4f 50 45 20 76 6f 69 64 09 54 63 6c 70 53 70 COPE void.TclpSp
3e60: 6c 69 63 65 46 69 6c 65 43 68 61 6e 6e 65 6c 20 liceFileChannel
3e70: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c _ANSI_ARGS_((Tcl
3e80: 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 29 29 3b _Channel chan));
3e90: 0a 2d 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 76 .-MODULE_SCOPE v
3ea0: 6f 69 64 09 54 63 6c 70 53 70 6c 69 63 65 53 6f oid.TclpSpliceSo
3eb0: 63 6b 43 68 61 6e 6e 65 6c 20 5f 41 4e 53 49 5f ckChannel _ANSI_
3ec0: 41 52 47 53 5f 28 28 54 63 6c 5f 43 68 61 6e 6e ARGS_((Tcl_Chann
3ed0: 65 6c 20 63 68 61 6e 29 29 3b 0a 20 4d 4f 44 55 el chan));. MODU
3ee0: 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 09 54 63 LE_SCOPE void.Tc
3ef0: 6c 70 50 61 6e 69 63 20 5f 41 4e 53 49 5f 41 52 lpPanic _ANSI_AR
3f00: 47 53 5f 28 54 43 4c 5f 56 41 52 41 52 47 53 28 GS_(TCL_VARARGS(
3f10: 43 4f 4e 53 54 20 63 68 61 72 20 2a 2c 0a 20 09 CONST char *,. .
3f20: 09 09 20 20 20 20 66 6f 72 6d 61 74 29 29 3b 0a .. format));.
3f30: 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 63 68 MODULE_SCOPE ch
3f40: 61 72 20 2a 09 54 63 6c 70 52 65 61 64 6c 69 6e ar *.TclpReadlin
3f50: 6b 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 k _ANSI_ARGS_((C
3f60: 4f 4e 53 54 20 63 68 61 72 20 2a 66 69 6c 65 4e ONST char *fileN
3f70: 61 6d 65 2c 0a 49 6e 64 65 78 3a 20 67 65 6e 65 ame,.Index: gene
3f80: 72 69 63 2f 74 63 6c 53 74 75 62 49 6e 69 74 2e ric/tclStubInit.
3f90: 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d c.==============
3fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
3fd0: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 =====.RCS file:
3fe0: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c /cvsroot/tcl/tcl
3ff0: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 53 74 75 62 /generic/tclStub
4000: 49 6e 69 74 2e 63 2c 76 0a 72 65 74 72 69 65 76 Init.c,v.retriev
4010: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 ing revision 1.1
4020: 31 32 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 12.diff -w -u -r
4030: 31 2e 31 31 32 20 74 63 6c 53 74 75 62 49 6e 69 1.112 tclStubIni
4040: 74 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f t.c.--- generic/
4050: 74 63 6c 53 74 75 62 49 6e 69 74 2e 63 09 32 31 tclStubInit.c.21
4060: 20 4a 61 6e 20 32 30 30 35 20 32 32 3a 32 35 3a Jan 2005 22:25:
4070: 31 39 20 2d 30 30 30 30 09 31 2e 31 31 32 0a 2b 19 -0000.1.112.+
4080: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 53 74 ++ generic/tclSt
4090: 75 62 49 6e 69 74 2e 63 09 32 36 20 4a 61 6e 20 ubInit.c.26 Jan
40a0: 32 30 30 35 20 32 33 3a 33 36 3a 35 31 20 2d 30 2005 23:36:51 -0
40b0: 30 30 30 0a 40 40 20 2d 39 37 30 2c 36 20 2b 39 000.@@ -970,6 +9
40c0: 37 30 2c 37 20 40 40 0a 20 20 20 20 20 54 63 6c 70,7 @@. Tcl
40d0: 5f 47 65 74 45 6e 73 65 6d 62 6c 65 4e 61 6d 65 _GetEnsembleName
40e0: 73 70 61 63 65 2c 20 2f 2a 20 35 35 31 20 2a 2f space, /* 551 */
40f0: 0a 20 20 20 20 20 54 63 6c 5f 53 65 74 54 69 6d . Tcl_SetTim
4100: 65 50 72 6f 63 2c 20 2f 2a 20 35 35 32 20 2a 2f eProc, /* 552 */
4110: 0a 20 20 20 20 20 54 63 6c 5f 51 75 65 72 79 54 . Tcl_QueryT
4120: 69 6d 65 50 72 6f 63 2c 20 2f 2a 20 35 35 33 20 imeProc, /* 553
4130: 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 43 68 61 6e */.+ Tcl_Chan
4140: 6e 65 6c 54 68 72 65 61 64 41 63 74 69 6f 6e 50 nelThreadActionP
4150: 72 6f 63 2c 20 2f 2a 20 35 35 34 20 2a 2f 0a 20 roc, /* 554 */.
4160: 7d 3b 0a 20 0a 20 2f 2a 20 21 45 4e 44 21 3a 20 };. . /* !END!:
4170: 44 6f 20 6e 6f 74 20 65 64 69 74 20 61 62 6f 76 Do not edit abov
4180: 65 20 74 68 69 73 20 6c 69 6e 65 2e 20 2a 2f 0a e this line. */.
4190: 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 69 6f 2e Index: tests/io.
41a0: 74 65 73 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d test.===========
41b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
41c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
41d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
41e0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c ========.RCS fil
41f0: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f e: /cvsroot/tcl/
4200: 74 63 6c 2f 74 65 73 74 73 2f 69 6f 2e 74 65 73 tcl/tests/io.tes
4210: 74 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 t,v.retrieving r
4220: 65 76 69 73 69 6f 6e 20 31 2e 36 35 0a 64 69 66 evision 1.65.dif
4230: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 36 35 20 69 f -w -u -r1.65 i
4240: 6f 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 73 o.test.--- tests
4250: 2f 69 6f 2e 74 65 73 74 09 31 38 20 4e 6f 76 20 /io.test.18 Nov
4260: 32 30 30 34 20 31 39 3a 32 32 3a 31 32 20 2d 30 2004 19:22:12 -0
4270: 30 30 30 09 31 2e 36 35 0a 2b 2b 2b 20 74 65 73 000.1.65.+++ tes
4280: 74 73 2f 69 6f 2e 74 65 73 74 09 32 36 20 4a 61 ts/io.test.26 Ja
4290: 6e 20 32 30 30 35 20 32 33 3a 33 36 3a 35 32 20 n 2005 23:36:52
42a0: 2d 30 30 30 30 0a 40 40 20 2d 31 37 30 34 2c 36 -0000.@@ -1704,6
42b0: 20 2b 31 37 30 34 2c 31 32 20 40 40 0a 20 20 20 +1704,12 @@.
42c0: 20 20 73 65 74 20 66 20 5b 6f 70 65 6e 20 22 7c set f [open "|
42d0: 5b 6c 69 73 74 20 5b 69 6e 74 65 72 70 72 65 74 [list [interpret
42e0: 65 72 5d 20 24 70 61 74 68 28 73 63 72 69 70 74 er] $path(script
42f0: 29 20 5b 61 72 72 61 79 20 67 65 74 20 70 61 74 ) [array get pat
4300: 68 5d 5d 22 20 72 5d 0a 20 20 20 20 20 73 65 74 h]]" r]. set
4310: 20 63 20 5b 67 65 74 73 20 24 66 5d 0a 20 20 20 c [gets $f].
4320: 20 20 63 6c 6f 73 65 20 24 66 0a 2b 20 20 20 20 close $f.+
4330: 23 20 41 64 64 65 64 20 64 65 6c 61 79 20 74 6f # Added delay to
4340: 20 67 69 76 65 20 57 69 6e 64 6f 77 73 20 74 69 give Windows ti
4350: 6d 65 20 74 6f 20 73 74 6f 70 20 74 68 65 20 73 me to stop the s
4360: 70 61 77 6e 65 64 20 70 72 6f 63 65 73 73 20 61 pawned process a
4370: 6e 64 20 63 6c 65 61 6e 0a 2b 20 20 20 20 23 20 nd clean.+ #
4380: 75 70 20 69 74 73 20 67 72 69 70 20 6f 6e 20 74 up its grip on t
4390: 68 65 20 66 69 6c 65 20 74 65 73 74 31 2e 20 41 he file test1. A
43a0: 64 64 65 64 20 64 65 6c 65 74 65 20 61 73 20 70 dded delete as p
43b0: 72 6f 70 65 72 20 74 65 73 74 20 63 6c 65 61 6e roper test clean
43c0: 75 70 2e 0a 2b 20 20 20 20 23 20 54 68 65 20 66 up..+ # The f
43d0: 61 69 6c 69 6e 67 20 74 65 73 74 73 20 77 65 72 ailing tests wer
43e0: 65 20 31 38 2e 31 20 61 6e 64 20 31 38 2e 32 20 e 18.1 and 18.2
43f0: 61 73 20 66 69 72 73 74 20 72 65 2d 75 73 65 72 as first re-user
4400: 73 20 6f 66 20 66 69 6c 65 20 22 74 65 73 74 31 s of file "test1
4410: 22 2e 0a 2b 20 20 20 20 61 66 74 65 72 20 31 30 "..+ after 10
4420: 30 30 30 0a 2b 20 20 20 20 66 69 6c 65 20 64 65 000.+ file de
4430: 6c 65 74 65 20 24 70 61 74 68 28 73 63 72 69 70 lete $path(scrip
4440: 74 29 0a 2b 20 20 20 20 66 69 6c 65 20 64 65 6c t).+ file del
4450: 65 74 65 20 24 70 61 74 68 28 74 65 73 74 31 29 ete $path(test1)
4460: 0a 20 20 20 20 20 73 65 74 20 63 0a 20 7d 20 68 . set c. } h
4470: 65 6c 6c 6f 0a 20 0a 49 6e 64 65 78 3a 20 75 6e ello. .Index: un
4480: 69 78 2f 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 ix/tclUnixChan.c
4490: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .===============
44a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
44d0: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f ====.RCS file: /
44e0: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f cvsroot/tcl/tcl/
44f0: 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 68 61 6e unix/tclUnixChan
4500: 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 .c,v.retrieving
4510: 72 65 76 69 73 69 6f 6e 20 31 2e 35 33 0a 64 69 revision 1.53.di
4520: 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 35 33 20 ff -w -u -r1.53
4530: 74 63 6c 55 6e 69 78 43 68 61 6e 2e 63 0a 2d 2d tclUnixChan.c.--
4540: 2d 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78 43 68 - unix/tclUnixCh
4550: 61 6e 2e 63 09 31 37 20 4e 6f 76 20 32 30 30 34 an.c.17 Nov 2004
4560: 20 30 32 3a 35 31 3a 33 32 20 2d 30 30 30 30 09 02:51:32 -0000.
4570: 31 2e 35 33 0a 2b 2b 2b 20 75 6e 69 78 2f 74 63 1.53.+++ unix/tc
4580: 6c 55 6e 69 78 43 68 61 6e 2e 63 09 32 36 20 4a lUnixChan.c.26 J
4590: 61 6e 20 32 30 30 35 20 32 33 3a 33 36 3a 35 32 an 2005 23:36:52
45a0: 20 2d 30 30 30 30 0a 40 40 20 2d 32 33 32 2c 36 -0000.@@ -232,6
45b0: 20 2b 32 33 32 2c 31 30 20 40 40 0a 20 09 09 09 +232,10 @@. ...
45c0: 20 20 20 20 69 6e 74 20 74 6f 57 72 69 74 65 2c int toWrite,
45d0: 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 29 int *errorCode)
45e0: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 );. static int..
45f0: 46 69 6c 65 53 65 65 6b 50 72 6f 63 20 5f 41 4e FileSeekProc _AN
4600: 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 SI_ARGS_((Client
4610: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 Data instanceDat
4620: 61 2c 0a 20 09 09 09 20 20 20 20 6c 6f 6e 67 20 a,. ... long
4630: 6f 66 66 73 65 74 2c 20 69 6e 74 20 6d 6f 64 65 offset, int mode
4640: 2c 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 , int *errorCode
4650: 29 29 3b 0a 2b 23 69 66 64 65 66 20 44 45 50 52 ));.+#ifdef DEPR
4660: 45 43 41 54 45 44 0a 2b 73 74 61 74 69 63 20 76 ECATED.+static v
4670: 6f 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 oid
4680: 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e FileThreadAction
4690: 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f Proc _ANSI_ARGS_
46a0: 20 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e ((.+... Clien
46b0: 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 tData instanceDa
46c0: 74 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 ta, int action))
46d0: 3b 0a 2b 23 65 6e 64 69 66 0a 20 73 74 61 74 69 ;.+#endif. stati
46e0: 63 20 54 63 6c 5f 57 69 64 65 49 6e 74 09 46 69 c Tcl_WideInt.Fi
46f0: 6c 65 57 69 64 65 53 65 65 6b 50 72 6f 63 20 5f leWideSeekProc _
4700: 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65 ANSI_ARGS_((Clie
4710: 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 ntData instanceD
4720: 61 74 61 2c 0a 20 09 09 09 20 20 20 20 54 63 6c ata,. ... Tcl
4730: 5f 57 69 64 65 49 6e 74 20 6f 66 66 73 65 74 2c _WideInt offset,
4740: 20 69 6e 74 20 6d 6f 64 65 2c 20 69 6e 74 20 2a int mode, int *
4750: 65 72 72 6f 72 43 6f 64 65 29 29 3b 0a 20 73 74 errorCode));. st
4760: 61 74 69 63 20 76 6f 69 64 09 09 46 69 6c 65 57 atic void..FileW
4770: 61 74 63 68 50 72 6f 63 20 5f 41 4e 53 49 5f 41 atchProc _ANSI_A
4780: 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 61 RGS_((ClientData
4790: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a 40 instanceData,.@
47a0: 40 20 2d 32 39 31 2c 37 20 2b 32 39 35 2c 37 20 @ -291,7 +295,7
47b0: 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c @@. . static Tcl
47c0: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 66 69 6c _ChannelType fil
47d0: 65 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b eChannelType = {
47e0: 0a 20 20 20 20 20 22 66 69 6c 65 22 2c 09 09 09 . "file",...
47f0: 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f /* Type name. */
4800: 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 .- TCL_CHANNE
4810: 4c 5f 56 45 52 53 49 4f 4e 5f 33 2c 09 2f 2a 20 L_VERSION_3,./*
4820: 76 33 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 v3 channel */.+
4830: 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 TCL_CHANNEL_V
4840: 45 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 ERSION_4,./* v4
4850: 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 channel */.
4860: 46 69 6c 65 43 6c 6f 73 65 50 72 6f 63 2c 09 09 FileCloseProc,..
4870: 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a /* Close proc. *
4880: 2f 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 74 /. FileInput
4890: 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 Proc,../* Input
48a0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 proc. */. Fi
48b0: 6c 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 2f leOutputProc,../
48c0: 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a * Output proc. *
48d0: 2f 0a 40 40 20 2d 33 30 35 2c 36 20 2b 33 30 39 /.@@ -305,6 +309
48e0: 2c 31 31 20 40 40 0a 20 20 20 20 20 4e 55 4c 4c ,11 @@. NULL
48f0: 2c 09 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f ,.../* flush pro
4900: 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c c. */. NULL,
4910: 09 09 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 .../* handler pr
4920: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 oc. */. File
4930: 57 69 64 65 53 65 65 6b 50 72 6f 63 2c 09 09 2f WideSeekProc,../
4940: 2a 20 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 * wide seek proc
4950: 2e 20 2a 2f 0a 2b 23 69 66 64 65 66 20 44 45 50 . */.+#ifdef DEP
4960: 52 45 43 41 54 45 44 0a 2b 20 20 20 20 46 69 6c RECATED.+ Fil
4970: 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f eThreadActionPro
4980: 63 2c 20 20 20 20 20 20 20 2f 2a 20 74 68 72 65 c, /* thre
4990: 61 64 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 2b 23 ad actions */.+#
49a0: 65 6c 73 65 0a 2b 20 20 20 20 4e 55 4c 4c 2c 0a else.+ NULL,.
49b0: 2b 23 65 6e 64 69 66 0a 20 7d 3b 0a 20 0a 20 23 +#endif. };. . #
49c0: 69 66 64 65 66 20 53 55 50 50 4f 52 54 53 5f 54 ifdef SUPPORTS_T
49d0: 54 59 0a 40 40 20 2d 33 31 35 2c 37 20 2b 33 32 TY.@@ -315,7 +32
49e0: 34 2c 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 4,7 @@. . static
49f0: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 Tcl_ChannelType
4a00: 20 74 74 79 43 68 61 6e 6e 65 6c 54 79 70 65 20 ttyChannelType
4a10: 3d 20 7b 0a 20 20 20 20 20 22 74 74 79 22 2c 09 = {. "tty",.
4a20: 09 09 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 ../* Type name.
4a30: 2a 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e */.- TCL_CHAN
4a40: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 09 2f NEL_VERSION_2,./
4a50: 2a 20 76 32 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a * v2 channel */.
4a60: 2b 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c + TCL_CHANNEL
4a70: 5f 56 45 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 _VERSION_4,./* v
4a80: 34 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 4 channel */.
4a90: 20 20 54 74 79 43 6c 6f 73 65 50 72 6f 63 2c 09 TtyCloseProc,.
4aa0: 09 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 ./* Close proc.
4ab0: 2a 2f 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 */. FileInpu
4ac0: 74 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 tProc,../* Input
4ad0: 20 70 72 6f 63 2e 20 2a 2f 0a 20 23 69 66 20 42 proc. */. #if B
4ae0: 41 44 5f 54 49 50 33 35 5f 46 4c 55 53 48 0a 40 AD_TIP35_FLUSH.@
4af0: 40 20 2d 33 33 32 2c 36 20 2b 33 34 31 2c 38 20 @ -332,6 +341,8
4b00: 40 40 0a 20 20 20 20 20 46 69 6c 65 42 6c 6f 63 @@. FileBloc
4b10: 6b 4d 6f 64 65 50 72 6f 63 2c 09 09 2f 2a 20 53 kModeProc,../* S
4b20: 65 74 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e et blocking or n
4b30: 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 on-blocking mode
4b40: 2e 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 .*/. NULL,..
4b50: 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 ./* flush proc.
4b60: 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 */. NULL,...
4b70: 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 2e /* handler proc.
4b80: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 */.+ NULL,..
4b90: 09 2f 2a 20 77 69 64 65 20 73 65 65 6b 20 70 72 ./* wide seek pr
4ba0: 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c oc. */.+ NULL
4bb0: 2c 09 09 09 2f 2a 20 74 68 72 65 61 64 20 61 63 ,.../* thread ac
4bc0: 74 69 6f 6e 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d tion proc. */. }
4bd0: 3b 0a 20 23 65 6e 64 69 66 09 2f 2a 20 53 55 50 ;. #endif./* SUP
4be0: 50 4f 52 54 53 5f 54 54 59 20 2a 2f 0a 20 0a 40 PORTS_TTY */. .@
4bf0: 40 20 2d 33 34 32 2c 37 20 2b 33 35 33 2c 37 20 @ -342,7 +353,7
4c00: 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c @@. . static Tcl
4c10: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 74 63 70 _ChannelType tcp
4c20: 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a ChannelType = {.
4c30: 20 20 20 20 20 22 74 63 70 22 2c 09 09 09 2f 2a "tcp",.../*
4c40: 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d Type name. */.-
4c50: 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f TCL_CHANNEL_
4c60: 56 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 76 32 VERSION_2,./* v2
4c70: 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 20 channel */.+
4c80: 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 TCL_CHANNEL_VER
4c90: 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 68 SION_4,./* v4 ch
4ca0: 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 54 63 annel */. Tc
4cb0: 70 43 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 pCloseProc,../*
4cc0: 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 Close proc. */.
4cd0: 20 20 20 20 54 63 70 49 6e 70 75 74 50 72 6f 63 TcpInputProc
4ce0: 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 6f 63 ,../* Input proc
4cf0: 2e 20 2a 2f 0a 20 20 20 20 20 54 63 70 4f 75 74 . */. TcpOut
4d00: 70 75 74 50 72 6f 63 2c 09 09 2f 2a 20 4f 75 74 putProc,../* Out
4d10: 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 put proc. */.@@
4d20: 2d 33 35 35 2c 36 20 2b 33 36 36 2c 38 20 40 40 -355,6 +366,8 @@
4d30: 0a 20 20 20 20 20 54 63 70 42 6c 6f 63 6b 4d 6f . TcpBlockMo
4d40: 64 65 50 72 6f 63 2c 09 09 2f 2a 20 53 65 74 20 deProc,../* Set
4d50: 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 6e 6f 6e 2d blocking or non-
4d60: 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 2a 2f blocking mode.*/
4d70: 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a . NULL,.../*
4d80: 20 66 6c 75 73 68 20 70 72 6f 63 2e 20 2a 2f 0a flush proc. */.
4d90: 20 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 NULL,.../*
4da0: 68 61 6e 64 6c 65 72 20 70 72 6f 63 2e 20 2a 2f handler proc. */
4db0: 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 09 2f 2a .+ NULL,.../*
4dc0: 20 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 2e wide seek proc.
4dd0: 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 09 09 */.+ NULL,..
4de0: 09 2f 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f ./* thread actio
4df0: 6e 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d 3b 0a 20 n proc. */. };.
4e00: 0a 20 0c 0a 40 40 20 2d 31 38 32 31 2c 36 20 2b . ..@@ -1821,6 +
4e10: 31 38 33 34 2c 31 35 20 40 40 0a 20 09 66 73 50 1834,15 @@. .fsP
4e20: 74 72 20 3d 20 28 46 69 6c 65 53 74 61 74 65 20 tr = (FileState
4e30: 2a 29 20 63 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 *) ckalloc((unsi
4e40: 67 6e 65 64 29 20 73 69 7a 65 6f 66 28 46 69 6c gned) sizeof(Fil
4e50: 65 53 74 61 74 65 29 29 3b 0a 20 20 20 20 20 7d eState));. }
4e60: 0a 20 0a 2b 23 69 66 64 65 66 20 44 45 50 52 45 . .+#ifdef DEPRE
4e70: 43 41 54 45 44 0a 2b 20 20 20 20 69 66 20 28 63 CATED.+ if (c
4e80: 68 61 6e 6e 65 6c 54 79 70 65 50 74 72 20 3d 3d hannelTypePtr ==
4e90: 20 26 66 69 6c 65 43 68 61 6e 6e 65 6c 54 79 70 &fileChannelTyp
4ea0: 65 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f 2a e) {.+ /*
4eb0: 20 54 49 50 20 23 32 31 38 2e 20 52 65 6d 6f 76 TIP #218. Remov
4ec0: 65 64 20 74 68 65 20 63 6f 64 65 20 69 6e 73 65 ed the code inse
4ed0: 72 74 69 6e 67 20 74 68 65 20 6e 65 77 20 73 74 rting the new st
4ee0: 72 75 63 74 75 72 65 0a 2b 09 20 2a 20 69 6e 74 ructure.+. * int
4ef0: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69 73 o the global lis
4f00: 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 68 t. This is now h
4f10: 61 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 74 68 andled in the th
4f20: 72 65 61 64 0a 2b 09 20 2a 20 61 63 74 69 6f 6e read.+. * action
4f30: 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e 64 20 callbacks, and
4f40: 6f 6e 6c 79 20 74 68 65 72 65 2e 0a 2b 09 20 2a only there..+. *
4f50: 2f 0a 2b 20 20 20 20 20 20 20 20 66 73 50 74 72 /.+ fsPtr
4f60: 2d 3e 6e 65 78 74 50 74 72 20 3d 20 4e 55 4c 4c ->nextPtr = NULL
4f70: 3b 0a 2b 20 20 20 20 7d 0a 2b 23 65 6e 64 69 66 ;.+ }.+#endif
4f80: 20 2f 2a 20 44 45 50 52 45 43 41 54 45 44 20 2a /* DEPRECATED *
4f90: 2f 0a 20 20 20 20 20 66 73 50 74 72 2d 3e 76 61 /. fsPtr->va
4fa0: 6c 69 64 4d 61 73 6b 20 3d 20 63 68 61 6e 6e 65 lidMask = channe
4fb0: 6c 50 65 72 6d 69 73 73 69 6f 6e 73 20 7c 20 54 lPermissions | T
4fc0: 43 4c 5f 45 58 43 45 50 54 49 4f 4e 3b 0a 20 20 CL_EXCEPTION;.
4fd0: 20 20 20 66 73 50 74 72 2d 3e 66 64 20 3d 20 66 fsPtr->fd = f
4fe0: 64 3b 0a 20 0a 40 40 20 2d 33 32 33 39 2c 31 33 d;. .@@ -3239,13
4ff0: 20 2b 33 32 36 31 2c 31 33 20 40 40 0a 20 20 20 +3261,13 @@.
5000: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b return result;
5010: 0a 20 7d 0a 20 0c 0a 2b 23 69 66 64 65 66 20 44 . }. ..+#ifdef D
5020: 45 50 52 45 43 41 54 45 44 0a 20 2f 2a 0a 20 20 EPRECATED. /*.
5030: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
5040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5070: 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2d 20 2a 20 -------. *.- *
5080: 54 63 6c 70 43 75 74 46 69 6c 65 43 68 61 6e 6e TclpCutFileChann
5090: 65 6c 20 2d 2d 0a 2b 20 2a 20 46 69 6c 65 54 68 el --.+ * FileTh
50a0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2d readActionProc -
50b0: 2d 0a 20 20 2a 0a 2d 20 2a 09 52 65 6d 6f 76 65 -. *.- *.Remove
50c0: 20 61 6e 79 20 74 68 72 65 61 64 20 6c 6f 63 61 any thread loca
50d0: 6c 20 72 65 66 73 20 74 6f 20 74 68 69 73 20 63 l refs to this c
50e0: 68 61 6e 6e 65 6c 2e 20 53 65 65 0a 2d 20 2a 09 hannel. See.- *.
50f0: 54 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c 20 66 Tcl_CutChannel f
5100: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 2e 0a 2b 20 or more info..+
5110: 2a 09 49 6e 73 65 72 74 20 6f 72 20 72 65 6d 6f *.Insert or remo
5120: 76 65 20 61 6e 79 20 74 68 72 65 61 64 20 6c 6f ve any thread lo
5130: 63 61 6c 20 72 65 66 73 20 74 6f 20 74 68 69 73 cal refs to this
5140: 20 63 68 61 6e 6e 65 6c 2e 0a 20 20 2a 0a 20 20 channel.. *.
5150: 2a 20 52 65 73 75 6c 74 73 3a 0a 20 20 2a 09 4e * Results:. *.N
5160: 6f 6e 65 2e 0a 40 40 20 2d 33 32 35 36 2c 33 35 one..@@ -3256,35
5170: 20 2b 33 32 37 38 2c 33 39 20 40 40 0a 20 20 2a +3278,39 @@. *
5180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
51a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
51b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
51c0: 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a 20 0a 2d 76 ------. */. .-v
51d0: 6f 69 64 0a 2d 54 63 6c 70 43 75 74 46 69 6c 65 oid.-TclpCutFile
51e0: 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 Channel(chan).-
51f0: 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 Tcl_Channel c
5200: 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 han;.../* The ch
5210: 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f annel being remo
5220: 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20 20 20 ved. Must.-
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5250: 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72 65 66 * not be ref
5260: 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 2d erenced in any.-
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5290: 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 65 72 * inter
52a0: 70 72 65 74 65 72 2e 20 2a 2f 0a 2b 73 74 61 74 preter. */.+stat
52b0: 69 63 20 76 6f 69 64 0a 2b 46 69 6c 65 54 68 72 ic void.+FileThr
52c0: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 69 eadActionProc (i
52d0: 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 61 63 74 nstanceData, act
52e0: 69 6f 6e 29 0a 2b 20 20 20 20 20 43 6c 69 65 6e ion).+ Clien
52f0: 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 tData instanceDa
5300: 74 61 3b 0a 2b 20 20 20 20 20 69 6e 74 20 61 63 ta;.+ int ac
5310: 74 69 6f 6e 3b 0a 20 7b 0a 2b 20 20 20 20 54 68 tion;. {.+ Th
5320: 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 readSpecificData
5330: 20 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f 54 *tsdPtr = TCL_T
5340: 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 79 SD_INIT(&dataKey
5350: 29 3b 0a 2b 20 20 20 20 46 69 6c 65 53 74 61 74 );.+ FileStat
5360: 65 20 2a 66 73 50 74 72 20 3d 20 28 46 69 6c 65 e *fsPtr = (File
5370: 53 74 61 74 65 20 2a 29 20 69 6e 73 74 61 6e 63 State *) instanc
5380: 65 44 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 69 66 eData;.+.+ if
5390: 20 28 61 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f (action == TCL_
53a0: 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 CHANNEL_THREAD_I
53b0: 4e 53 45 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 NSERT) {.+
53c0: 20 20 66 73 50 74 72 2d 3e 6e 65 78 74 50 74 72 fsPtr->nextPtr
53d0: 20 20 20 20 20 20 20 3d 20 74 73 64 50 74 72 2d = tsdPtr-
53e0: 3e 66 69 72 73 74 46 69 6c 65 50 74 72 3b 0a 2b >firstFilePtr;.+
53f0: 09 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46 69 .tsdPtr->firstFi
5400: 6c 65 50 74 72 20 3d 20 66 73 50 74 72 3b 0a 2b lePtr = fsPtr;.+
5410: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 } else {.+
5420: 20 20 20 20 20 20 46 69 6c 65 53 74 61 74 65 20 FileState
5430: 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 2b 09 **nextPtrPtr;.+.
5440: 69 6e 74 20 72 65 6d 6f 76 65 64 20 3d 20 30 3b int removed = 0;
5450: 0a 2b 0a 2b 09 66 6f 72 20 28 6e 65 78 74 50 74 .+.+.for (nextPt
5460: 72 50 74 72 20 3d 20 26 28 74 73 64 50 74 72 2d rPtr = &(tsdPtr-
5470: 3e 66 69 72 73 74 46 69 6c 65 50 74 72 29 3b 20 >firstFilePtr);
5480: 28 2a 6e 65 78 74 50 74 72 50 74 72 29 20 21 3d (*nextPtrPtr) !=
5490: 20 4e 55 4c 4c 3b 0a 2b 09 20 20 20 20 20 6e 65 NULL;.+. ne
54a0: 78 74 50 74 72 50 74 72 20 3d 20 26 28 28 2a 6e xtPtrPtr = &((*n
54b0: 65 78 74 50 74 72 50 74 72 29 2d 3e 6e 65 78 74 extPtrPtr)->next
54c0: 50 74 72 29 29 20 7b 0a 2b 09 20 20 20 20 69 66 Ptr)) {.+. if
54d0: 20 28 28 2a 6e 65 78 74 50 74 72 50 74 72 29 20 ((*nextPtrPtr)
54e0: 3d 3d 20 66 73 50 74 72 29 20 7b 0a 2b 09 20 20 == fsPtr) {.+.
54f0: 20 20 20 20 20 20 28 2a 6e 65 78 74 50 74 72 50 (*nextPtrP
5500: 74 72 29 20 3d 20 66 73 50 74 72 2d 3e 6e 65 78 tr) = fsPtr->nex
5510: 74 50 74 72 3b 0a 2b 09 09 72 65 6d 6f 76 65 64 tPtr;.+..removed
5520: 20 3d 20 31 3b 0a 2b 09 09 62 72 65 61 6b 3b 0a = 1;.+..break;.
5530: 2b 09 20 20 20 20 7d 0a 20 7d 0a 20 0c 0a 20 2f +. }. }. .. /
5540: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.- *-----------
5550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a -----------.- *.
5590: 2d 20 2a 20 54 63 6c 70 53 70 6c 69 63 65 46 69 - * TclpSpliceFi
55a0: 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2d 20 2a leChannel --.- *
55b0: 0a 2d 20 2a 09 49 6e 73 65 72 74 20 74 68 72 65 .- *.Insert thre
55c0: 61 64 20 6c 6f 63 61 6c 20 72 65 66 20 66 6f 72 ad local ref for
55d0: 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2d this channel..-
55e0: 20 2a 09 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 *.Tcl_SpliceCha
55f0: 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e nnel for more in
5600: 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75 fo..- *.- * Resu
5610: 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d lts:.- *.None..-
5620: 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 66 65 *.- * Side effe
5630: 63 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e 20 54 cts:.- *.None. T
5640: 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 75 his is a no-op u
5650: 6e 64 65 72 20 75 6e 69 78 2e 0a 2d 20 2a 0a 2d nder unix..- *.-
5660: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
5670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
56a0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 09 20 2a 20 54 68 --------.+. * Th
56b0: 69 73 20 63 6f 75 6c 64 20 68 61 70 70 65 6e 20 is could happen
56c0: 69 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 77 if the channel w
56d0: 61 73 20 63 72 65 61 74 65 64 20 69 6e 20 6f 6e as created in on
56e0: 65 0a 2b 09 20 2a 20 74 68 72 65 61 64 20 61 6e e.+. * thread an
56f0: 64 20 74 68 65 6e 20 6d 6f 76 65 64 20 74 6f 20 d then moved to
5700: 61 6e 6f 74 68 65 72 20 77 69 74 68 6f 75 74 20 another without
5710: 75 70 64 61 74 69 6e 67 0a 2b 09 20 2a 20 74 68 updating.+. * th
5720: 65 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 64 e thread local d
5730: 61 74 61 20 69 6e 20 65 61 63 68 20 74 68 72 65 ata in each thre
5740: 61 64 2e 0a 20 20 2a 2f 0a 20 0a 2d 76 6f 69 64 ad.. */. .-void
5750: 0a 2d 54 63 6c 70 53 70 6c 69 63 65 46 69 6c 65 .-TclpSpliceFile
5760: 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 Channel(chan).-
5770: 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 Tcl_Channel c
5780: 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 han;.../* The ch
5790: 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f annel being remo
57a0: 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20 20 20 ved. Must.-
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57d0: 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72 65 66 * not be ref
57e0: 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 2d erenced in any.-
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5810: 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 65 72 * inter
5820: 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 7b 0a 2b 09 preter. */.-{.+.
5830: 69 66 20 28 21 72 65 6d 6f 76 65 64 29 20 7b 0a if (!removed) {.
5840: 2b 09 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 +. Tcl_Panic(
5850: 22 66 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e "file info ptr n
5860: 6f 74 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 ot on thread cha
5870: 6e 6e 65 6c 20 6c 69 73 74 22 29 3b 0a 20 7d 0a nnel list");. }.
5880: 2b 20 20 20 20 7d 0a 2b 7d 0a 2b 23 65 6e 64 69 + }.+}.+#endi
5890: 66 0a 49 6e 64 65 78 3a 20 75 6e 69 78 2f 74 63 f.Index: unix/tc
58a0: 6c 55 6e 69 78 50 69 70 65 2e 63 0a 3d 3d 3d 3d lUnixPipe.c.====
58b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
58c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
58d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
58e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a ===============.
58f0: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f RCS file: /cvsro
5900: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 75 6e 69 78 2f ot/tcl/tcl/unix/
5910: 74 63 6c 55 6e 69 78 50 69 70 65 2e 63 2c 76 0a tclUnixPipe.c,v.
5920: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 retrieving revis
5930: 69 6f 6e 20 31 2e 32 36 0a 64 69 66 66 20 2d 77 ion 1.26.diff -w
5940: 20 2d 75 20 2d 72 31 2e 32 36 20 74 63 6c 55 6e -u -r1.26 tclUn
5950: 69 78 50 69 70 65 2e 63 0a 2d 2d 2d 20 75 6e 69 ixPipe.c.--- uni
5960: 78 2f 74 63 6c 55 6e 69 78 50 69 70 65 2e 63 09 x/tclUnixPipe.c.
5970: 36 20 4f 63 74 20 32 30 30 34 20 31 36 3a 30 38 6 Oct 2004 16:08
5980: 3a 35 37 20 2d 30 30 30 30 09 31 2e 32 36 0a 2b :57 -0000.1.26.+
5990: 2b 2b 20 75 6e 69 78 2f 74 63 6c 55 6e 69 78 50 ++ unix/tclUnixP
59a0: 69 70 65 2e 63 09 32 36 20 4a 61 6e 20 32 30 30 ipe.c.26 Jan 200
59b0: 35 20 32 33 3a 33 36 3a 35 32 20 2d 30 30 30 30 5 23:36:52 -0000
59c0: 0a 40 40 20 2d 37 31 2c 37 20 2b 37 31 2c 37 20 .@@ -71,7 +71,7
59d0: 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 6c @@. . static Tcl
59e0: 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 70 69 70 _ChannelType pip
59f0: 65 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b eChannelType = {
5a00: 0a 20 20 20 20 20 22 70 69 70 65 22 2c 09 09 09 . "pipe",...
5a10: 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f /* Type name. */
5a20: 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 .- TCL_CHANNE
5a30: 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 L_VERSION_2,./*
5a40: 76 32 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 v2 channel */.+
5a50: 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 TCL_CHANNEL_V
5a60: 45 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 ERSION_4,./* v4
5a70: 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 channel */.
5a80: 50 69 70 65 43 6c 6f 73 65 50 72 6f 63 2c 09 09 PipeCloseProc,..
5a90: 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a /* Close proc. *
5aa0: 2f 0a 20 20 20 20 20 50 69 70 65 49 6e 70 75 74 /. PipeInput
5ab0: 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 Proc,../* Input
5ac0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 50 69 proc. */. Pi
5ad0: 70 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 2f peOutputProc,../
5ae0: 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a * Output proc. *
5af0: 2f 0a 40 40 20 2d 38 34 2c 36 20 2b 38 34 2c 38 /.@@ -84,6 +84,8
5b00: 20 40 40 0a 20 20 20 20 20 50 69 70 65 42 6c 6f @@. PipeBlo
5b10: 63 6b 4d 6f 64 65 50 72 6f 63 2c 09 09 2f 2a 20 ckModeProc,../*
5b20: 53 65 74 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 Set blocking or
5b30: 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 non-blocking mod
5b40: 65 2e 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 e.*/. NULL,.
5b50: 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e ../* flush proc.
5b60: 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 */. NULL,..
5b70: 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 ./* handler proc
5b80: 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 . */.+ NULL,
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ba0: 20 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73 65 /* wide se
5bb0: 65 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20 20 ek proc */.+
5bc0: 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20 NULL,
5bd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 /* t
5be0: 68 72 65 61 64 20 61 63 74 69 6f 6e 20 70 72 6f hread action pro
5bf0: 63 20 2a 2f 0a 20 7d 3b 0a 20 0c 0a 20 2f 2a 0a c */. };. .. /*.
5c00: 49 6e 64 65 78 3a 20 75 6e 69 78 2f 74 63 6c 55 Index: unix/tclU
5c10: 6e 69 78 53 6f 63 6b 2e 63 0a 3d 3d 3d 3d 3d 3d nixSock.c.======
5c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
5c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 =============.RC
5c60: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 S file: /cvsroot
5c70: 2f 74 63 6c 2f 74 63 6c 2f 75 6e 69 78 2f 74 63 /tcl/tcl/unix/tc
5c80: 6c 55 6e 69 78 53 6f 63 6b 2e 63 2c 76 0a 72 65 lUnixSock.c,v.re
5c90: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f trieving revisio
5ca0: 6e 20 31 2e 39 0a 64 69 66 66 20 2d 77 20 2d 75 n 1.9.diff -w -u
5cb0: 20 2d 72 31 2e 39 20 74 63 6c 55 6e 69 78 53 6f -r1.9 tclUnixSo
5cc0: 63 6b 2e 63 0a 2d 2d 2d 20 75 6e 69 78 2f 74 63 ck.c.--- unix/tc
5cd0: 6c 55 6e 69 78 53 6f 63 6b 2e 63 09 36 20 41 70 lUnixSock.c.6 Ap
5ce0: 72 20 32 30 30 34 20 32 32 3a 32 35 3a 35 37 20 r 2004 22:25:57
5cf0: 2d 30 30 30 30 09 31 2e 39 0a 2b 2b 2b 20 75 6e -0000.1.9.+++ un
5d00: 69 78 2f 74 63 6c 55 6e 69 78 53 6f 63 6b 2e 63 ix/tclUnixSock.c
5d10: 09 32 36 20 4a 61 6e 20 32 30 30 35 20 32 33 3a .26 Jan 2005 23:
5d20: 33 36 3a 35 32 20 2d 30 30 30 30 0a 40 40 20 2d 36:52 -0000.@@ -
5d30: 31 34 37 2c 34 39 20 2b 31 34 37 2c 33 20 40 40 147,49 +147,3 @@
5d40: 0a 20 7b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 . {. return
5d50: 54 43 4c 5f 4f 4b 3b 0a 20 7d 0a 2d 0c 0a 2d 2f TCL_OK;. }.-..-/
5d60: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.- *-----------
5d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a -----------.- *.
5db0: 2d 20 2a 20 54 63 6c 70 43 75 74 53 6f 63 6b 43 - * TclpCutSockC
5dc0: 68 61 6e 6e 65 6c 20 2d 2d 0a 2d 20 2a 0a 2d 20 hannel --.- *.-
5dd0: 2a 09 52 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 *.Remove any thr
5de0: 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 ead local refs t
5df0: 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 20 o this channel.
5e00: 53 65 65 0a 2d 20 2a 09 54 63 6c 5f 43 75 74 43 See.- *.Tcl_CutC
5e10: 68 61 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 hannel for more
5e20: 69 6e 66 6f 2e 20 44 75 6d 6d 79 20 64 65 66 69 info. Dummy defi
5e30: 6e 69 74 69 6f 6e 2e 0a 2d 20 2a 0a 2d 20 2a 20 nition..- *.- *
5e40: 52 65 73 75 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e Results:.- *.Non
5e50: 65 2e 0a 2d 20 2a 0a 2d 20 2a 20 53 69 64 65 20 e..- *.- * Side
5e60: 65 66 66 65 63 74 73 3a 0a 2d 20 2a 09 4e 6f 6e effects:.- *.Non
5e70: 65 2e 0a 2d 20 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d e..- *.- *------
5e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5ec0: 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f 69 64 0a 2d 54 .- */.-.-void.-T
5ed0: 63 6c 70 43 75 74 53 6f 63 6b 43 68 61 6e 6e 65 clpCutSockChanne
5ee0: 6c 28 63 68 61 6e 29 0a 2d 20 20 20 20 54 63 6c l(chan).- Tcl
5ef0: 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 3b 0a 2d _Channel chan;.-
5f00: 7b 0a 2d 7d 0a 2d 0c 0a 2d 2f 2a 0a 2d 20 2a 2d {.-}.-..-/*.- *-
5f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
5f50: 2d 2d 2d 2d 2d 0a 2d 20 2a 0a 2d 20 2a 20 54 63 -----.- *.- * Tc
5f60: 6c 70 53 70 6c 69 63 65 53 6f 63 6b 43 68 61 6e lpSpliceSockChan
5f70: 6e 65 6c 20 2d 2d 0a 2d 20 2a 0a 2d 20 2a 09 49 nel --.- *.- *.I
5f80: 6e 73 65 72 74 20 74 68 72 65 61 64 20 6c 6f 63 nsert thread loc
5f90: 61 6c 20 72 65 66 20 66 6f 72 20 74 68 69 73 20 al ref for this
5fa0: 63 68 61 6e 6e 65 6c 2e 0a 2d 20 2a 09 54 63 6c channel..- *.Tcl
5fb0: 5f 53 70 6c 69 63 65 43 68 61 6e 6e 65 6c 20 66 _SpliceChannel f
5fc0: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 2e 20 44 75 or more info. Du
5fd0: 6d 6d 79 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a mmy definition..
5fe0: 2d 20 2a 0a 2d 20 2a 20 52 65 73 75 6c 74 73 3a - *.- * Results:
5ff0: 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d 20 2a 0a 2d .- *.None..- *.-
6000: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a * Side effects:
6010: 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d 20 2a 0a 2d .- *.None..- *.-
6020: 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *--------------
6030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6060: 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 2f 0a 2d 0a --------.- */.-.
6070: 2d 76 6f 69 64 0a 2d 54 63 6c 70 53 70 6c 69 63 -void.-TclpSplic
6080: 65 53 6f 63 6b 43 68 61 6e 6e 65 6c 28 63 68 61 eSockChannel(cha
6090: 6e 29 0a 2d 20 20 20 20 54 63 6c 5f 43 68 61 6e n).- Tcl_Chan
60a0: 6e 65 6c 20 63 68 61 6e 3b 0a 2d 7b 0a 2d 7d 0a nel chan;.-{.-}.
60b0: 49 6e 64 65 78 3a 20 77 69 6e 2f 74 63 6c 57 69 Index: win/tclWi
60c0: 6e 43 68 61 6e 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d nChan.c.========
60d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
60e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
60f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
6100: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 ===========.RCS
6110: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 file: /cvsroot/t
6120: 63 6c 2f 74 63 6c 2f 77 69 6e 2f 74 63 6c 57 69 cl/tcl/win/tclWi
6130: 6e 43 68 61 6e 2e 63 2c 76 0a 72 65 74 72 69 65 nChan.c,v.retrie
6140: 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e ving revision 1.
6150: 33 38 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d 72 38.diff -w -u -r
6160: 31 2e 33 38 20 74 63 6c 57 69 6e 43 68 61 6e 2e 1.38 tclWinChan.
6170: 63 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 6e c.--- win/tclWin
6180: 43 68 61 6e 2e 63 09 31 39 20 4a 61 6e 20 32 30 Chan.c.19 Jan 20
6190: 30 35 20 32 32 3a 30 37 3a 34 31 20 2d 30 30 30 05 22:07:41 -000
61a0: 30 09 31 2e 33 38 0a 2b 2b 2b 20 77 69 6e 2f 74 0.1.38.+++ win/t
61b0: 63 6c 57 69 6e 43 68 61 6e 2e 63 09 32 36 20 4a clWinChan.c.26 J
61c0: 61 6e 20 32 30 30 35 20 32 33 3a 33 36 3a 35 32 an 2005 23:36:52
61d0: 20 2d 30 30 30 30 0a 40 40 20 2d 39 38 2c 36 20 -0000.@@ -98,6
61e0: 2b 39 38 2c 38 20 40 40 0a 20 09 09 09 20 20 20 +98,8 @@. ...
61f0: 20 69 6e 74 20 66 6c 61 67 73 29 29 3b 0a 20 73 int flags));. s
6200: 74 61 74 69 63 20 76 6f 69 64 09 09 46 69 6c 65 tatic void..File
6210: 57 61 74 63 68 50 72 6f 63 20 5f 41 4e 53 49 5f WatchProc _ANSI_
6220: 41 52 47 53 5f 28 28 43 6c 69 65 6e 74 44 61 74 ARGS_((ClientDat
6230: 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 0a a instanceData,.
6240: 20 09 09 09 20 20 20 20 69 6e 74 20 6d 61 73 6b ... int mask
6250: 29 29 3b 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 ));.+static void
6260: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 69 6c Fil
6270: 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f eThreadActionPro
6280: 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20 28 28 c _ANSI_ARGS_ ((
6290: 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e 74 44 61 .+... ClientDa
62a0: 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c ta instanceData,
62b0: 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b 0a 20 int action));.
62c0: 0a 20 2f 2a 0a 20 20 2a 20 54 68 69 73 20 73 74 . /*. * This st
62d0: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 ructure describe
62e0: 73 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 74 79 s the channel ty
62f0: 70 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 pe structure for
6300: 20 66 69 6c 65 20 62 61 73 65 64 20 49 4f 2e 0a file based IO..
6310: 40 40 20 2d 31 30 35 2c 37 20 2b 31 30 37 2c 37 @@ -105,7 +107,7
6320: 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 @@. . static Tc
6330: 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 66 69 l_ChannelType fi
6340: 6c 65 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 leChannelType =
6350: 7b 0a 20 20 20 20 20 22 66 69 6c 65 22 2c 09 09 {. "file",..
6360: 09 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a ./* Type name. *
6370: 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e /.- TCL_CHANN
6380: 45 4c 5f 56 45 52 53 49 4f 4e 5f 33 2c 09 2f 2a EL_VERSION_3,./*
6390: 20 76 33 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b v3 channel */.+
63a0: 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f TCL_CHANNEL_
63b0: 56 45 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 VERSION_4,./* v4
63c0: 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 channel */.
63d0: 20 46 69 6c 65 43 6c 6f 73 65 50 72 6f 63 2c 09 FileCloseProc,.
63e0: 09 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 ./* Close proc.
63f0: 2a 2f 0a 20 20 20 20 20 46 69 6c 65 49 6e 70 75 */. FileInpu
6400: 74 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 tProc,../* Input
6410: 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 proc. */. F
6420: 69 6c 65 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 ileOutputProc,..
6430: 2f 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 /* Output proc.
6440: 2a 2f 0a 40 40 20 2d 31 31 39 2c 36 20 2b 31 32 */.@@ -119,6 +12
6450: 31 2c 37 20 40 40 0a 20 20 20 20 20 4e 55 4c 4c 1,7 @@. NULL
6460: 2c 09 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f ,.../* flush pro
6470: 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c c. */. NULL,
6480: 09 09 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 .../* handler pr
6490: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 46 69 6c 65 oc. */. File
64a0: 57 69 64 65 53 65 65 6b 50 72 6f 63 2c 09 09 2f WideSeekProc,../
64b0: 2a 20 57 69 64 65 20 73 65 65 6b 20 70 72 6f 63 * Wide seek proc
64c0: 2e 20 2a 2f 0a 2b 20 20 20 20 46 69 6c 65 54 68 . */.+ FileTh
64d0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 2c 09 readActionProc,.
64e0: 2f 2a 20 54 68 72 65 61 64 20 61 63 74 69 6f 6e /* Thread action
64f0: 20 70 72 6f 63 2e 20 2a 2f 0a 20 7d 3b 0a 20 0a proc. */. };. .
6500: 20 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 #if defined(HAV
6510: 45 5f 4e 4f 5f 53 45 48 29 20 26 26 20 64 65 66 E_NO_SEH) && def
6520: 69 6e 65 64 28 54 43 4c 5f 4d 45 4d 5f 44 45 42 ined(TCL_MEM_DEB
6530: 55 47 29 0a 40 40 20 2d 34 33 30 2c 31 31 20 2b UG).@@ -430,11 +
6540: 34 33 33 2c 31 31 20 40 40 0a 20 09 69 66 20 28 433,11 @@. .if (
6550: 69 6e 66 6f 50 74 72 20 3d 3d 20 66 69 6c 65 49 infoPtr == fileI
6560: 6e 66 6f 50 74 72 29 20 7b 0a 20 20 20 20 20 20 nfoPtr) {.
6570: 20 20 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 /*.
6580: 20 20 20 20 20 20 20 20 2a 20 54 68 69 73 20 63 * This c
6590: 68 61 6e 6e 65 6c 20 65 78 69 73 74 73 20 6f 6e hannel exists on
65a0: 20 74 68 65 20 74 68 72 65 61 64 20 6c 6f 63 61 the thread loca
65b0: 6c 20 6c 69 73 74 2e 20 49 74 20 73 68 6f 75 6c l list. It shoul
65c0: 64 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 20 d.-
65d0: 2a 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f * have been remo
65e0: 76 65 64 20 62 79 20 61 6e 20 65 61 72 6c 69 65 ved by an earlie
65f0: 72 20 63 61 6c 6c 20 74 6f 20 54 63 6c 70 43 75 r call to TclpCu
6600: 74 46 69 6c 65 43 68 61 6e 6e 65 6c 2c 0a 2b 20 tFileChannel,.+
6610: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 68 61 * ha
6620: 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 ve been removed
6630: 62 79 20 61 6e 20 65 61 72 6c 69 65 72 20 54 68 by an earlier Th
6640: 72 65 61 64 61 63 74 69 6f 6e 20 63 61 6c 6c 2c readaction call,
6650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a . *
6660: 20 62 75 74 20 64 6f 20 74 68 61 74 20 6e 6f 77 but do that now
6670: 20 73 69 6e 63 65 20 6a 75 73 74 20 64 65 61 6c since just deal
6680: 6c 6f 63 61 74 69 6e 67 20 66 69 6c 65 49 6e 66 locating fileInf
6690: 6f 50 74 72 20 77 6f 75 6c 64 0a 20 20 20 20 20 oPtr would.
66a0: 20 20 20 20 20 20 20 20 20 2a 20 6c 65 61 76 65 * leave
66b0: 20 61 6e 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 an deallocated
66c0: 70 6f 69 6e 74 65 72 20 6f 6e 20 74 68 65 20 74 pointer on the t
66d0: 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74 hread local list
66e0: 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..
66f0: 2a 2f 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 */.-
6700: 54 63 6c 70 43 75 74 46 69 6c 65 43 68 61 6e 6e TclpCutFileChann
6710: 65 6c 28 66 69 6c 65 49 6e 66 6f 50 74 72 2d 3e el(fileInfoPtr->
6720: 63 68 61 6e 6e 65 6c 29 3b 0a 2b 09 20 20 20 20 channel);.+.
6730: 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 6f 6e FileThreadAction
6740: 50 72 6f 63 28 66 69 6c 65 49 6e 66 6f 50 74 72 Proc(fileInfoPtr
6750: 2c 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 52 ,TCL_CHANNEL_THR
6760: 45 41 44 5f 52 45 4d 4f 56 45 29 3b 0a 20 20 20 EAD_REMOVE);.
6770: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b break;
6780: 0a 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 . }.
6790: 20 7d 0a 40 40 20 2d 31 33 30 37 2c 38 20 2b 31 }.@@ -1307,8 +1
67a0: 33 31 30 2c 31 31 20 40 40 0a 20 20 20 20 20 7d 310,11 @@. }
67b0: 0a 20 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 20 . . infoPtr
67c0: 3d 20 28 46 69 6c 65 49 6e 66 6f 20 2a 29 20 63 = (FileInfo *) c
67d0: 6b 61 6c 6c 6f 63 28 28 75 6e 73 69 67 6e 65 64 kalloc((unsigned
67e0: 29 20 73 69 7a 65 6f 66 28 46 69 6c 65 49 6e 66 ) sizeof(FileInf
67f0: 6f 29 29 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 o));.- infoPt
6800: 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 r->nextPtr = tsd
6810: 50 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 Ptr->firstFilePt
6820: 72 3b 0a 2d 20 20 20 20 74 73 64 50 74 72 2d 3e r;.- tsdPtr->
6830: 66 69 72 73 74 46 69 6c 65 50 74 72 20 3d 20 69 firstFilePtr = i
6840: 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 2f 2a 20 nfoPtr;.+ /*
6850: 54 49 50 20 23 32 31 38 2e 20 52 65 6d 6f 76 65 TIP #218. Remove
6860: 64 20 74 68 65 20 63 6f 64 65 20 69 6e 73 65 72 d the code inser
6870: 74 69 6e 67 20 74 68 65 20 6e 65 77 20 73 74 72 ting the new str
6880: 75 63 74 75 72 65 0a 2b 20 20 20 20 20 2a 20 69 ucture.+ * i
6890: 6e 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c nto the global l
68a0: 69 73 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 ist. This is now
68b0: 20 68 61 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 handled in the
68c0: 74 68 72 65 61 64 0a 2b 20 20 20 20 20 2a 20 61 thread.+ * a
68d0: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 2c ction callbacks,
68e0: 20 61 6e 64 20 6f 6e 6c 79 20 74 68 65 72 65 2e and only there.
68f0: 0a 2b 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 69 .+ */.+ i
6900: 6e 66 6f 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 nfoPtr->nextPtr
6910: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 69 6e 66 = NULL;. inf
6920: 6f 50 74 72 2d 3e 76 61 6c 69 64 4d 61 73 6b 20 oPtr->validMask
6930: 3d 20 70 65 72 6d 69 73 73 69 6f 6e 73 3b 0a 20 = permissions;.
6940: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 77 61 74 infoPtr->wat
6950: 63 68 4d 61 73 6b 20 3d 20 30 3b 0a 20 20 20 20 chMask = 0;.
6960: 20 69 6e 66 6f 50 74 72 2d 3e 66 6c 61 67 73 20 infoPtr->flags
6970: 3d 20 61 70 70 65 6e 64 4d 6f 64 65 3b 0a 40 40 = appendMode;.@@
6980: 20 2d 31 33 37 33 2c 31 30 20 2b 31 33 37 39 2c -1373,10 +1379,
6990: 39 20 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 9 @@. /*. *----
69a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
69b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
69c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
69d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
69e0: 2d 2d 0a 20 20 2a 0a 2d 20 2a 20 54 63 6c 70 43 --. *.- * TclpC
69f0: 75 74 46 69 6c 65 43 68 61 6e 6e 65 6c 20 2d 2d utFileChannel --
6a00: 0a 2b 20 2a 20 46 69 6c 65 54 68 72 65 61 64 41 .+ * FileThreadA
6a10: 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 20 2a ctionProc --. *
6a20: 0a 2d 20 2a 09 52 65 6d 6f 76 65 20 61 6e 79 20 .- *.Remove any
6a30: 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 thread local ref
6a40: 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 s to this channe
6a50: 6c 2e 20 53 65 65 0a 2d 20 2a 09 53 65 65 20 54 l. See.- *.See T
6a60: 63 6c 5f 43 75 74 43 68 61 6e 6e 65 6c 20 66 6f cl_CutChannel fo
6a70: 72 20 6d 6f 72 65 20 69 6e 66 6f 2e 0a 2b 20 2a r more info..+ *
6a80: 09 49 6e 73 65 72 74 20 6f 72 20 72 65 6d 6f 76 .Insert or remov
6a90: 65 20 61 6e 79 20 74 68 72 65 61 64 20 6c 6f 63 e any thread loc
6aa0: 61 6c 20 72 65 66 73 20 74 6f 20 74 68 69 73 20 al refs to this
6ab0: 63 68 61 6e 6e 65 6c 2e 0a 20 20 2a 0a 20 20 2a channel.. *. *
6ac0: 20 52 65 73 75 6c 74 73 3a 0a 20 20 2a 09 4e 6f Results:. *.No
6ad0: 6e 65 2e 0a 40 40 20 2d 31 33 38 37 2c 32 34 20 ne..@@ -1387,24
6ae0: 2b 31 33 39 32 2c 32 31 20 40 40 0a 20 20 2a 2d +1392,21 @@. *-
6af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6b30: 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a 20 0a 2d 76 6f -----. */. .-vo
6b40: 69 64 0a 2d 54 63 6c 70 43 75 74 46 69 6c 65 43 id.-TclpCutFileC
6b50: 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 20 hannel(chan).-
6b60: 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 Tcl_Channel ch
6b70: 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 61 an;.../* The cha
6b80: 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f 76 nnel being remov
6b90: 65 64 2e 20 4d 75 73 74 0a 2d 09 09 09 09 09 20 ed. Must.-.....
6ba0: 2a 20 6e 6f 74 20 62 65 20 72 65 66 65 72 65 6e * not be referen
6bb0: 63 65 64 20 69 6e 20 61 6e 79 0a 2d 09 09 09 09 ced in any.-....
6bc0: 09 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e . * interpreter.
6bd0: 20 2a 2f 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 */.+static void
6be0: 0a 2b 46 69 6c 65 54 68 72 65 61 64 41 63 74 69 .+FileThreadActi
6bf0: 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 6e 63 65 onProc (instance
6c00: 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 0a 2b 20 Data, action).+
6c10: 20 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 ClientData i
6c20: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 20 nstanceData;.+
6c30: 20 20 20 69 6e 74 20 61 63 74 69 6f 6e 3b 0a 20 int action;.
6c40: 7b 0a 20 20 20 20 20 54 68 72 65 61 64 53 70 65 {. ThreadSpe
6c50: 63 69 66 69 63 44 61 74 61 20 2a 74 73 64 50 74 cificData *tsdPt
6c60: 72 20 3d 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 r = TCL_TSD_INIT
6c70: 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d 20 20 20 (&dataKey);.-
6c80: 20 43 68 61 6e 6e 65 6c 20 2a 63 68 61 6e 50 74 Channel *chanPt
6c90: 72 20 3d 20 28 43 68 61 6e 6e 65 6c 20 2a 29 20 r = (Channel *)
6ca0: 63 68 61 6e 3b 0a 2d 20 20 20 20 46 69 6c 65 49 chan;.- FileI
6cb0: 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 3b 0a 2b 20 nfo *infoPtr;.+
6cc0: 20 20 20 46 69 6c 65 49 6e 66 6f 20 2a 69 6e 66 FileInfo *inf
6cd0: 6f 50 74 72 20 3d 20 28 46 69 6c 65 49 6e 66 6f oPtr = (FileInfo
6ce0: 20 2a 29 20 69 6e 73 74 61 6e 63 65 44 61 74 61 *) instanceData
6cf0: 3b 0a 2b 0a 2b 20 20 20 20 69 66 20 28 61 63 74 ;.+.+ if (act
6d00: 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 4e 4e ion == TCL_CHANN
6d10: 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 52 54 EL_THREAD_INSERT
6d20: 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 69 6e 66 ) {.+ inf
6d30: 6f 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 oPtr->nextPtr =
6d40: 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46 69 6c tsdPtr->firstFil
6d50: 65 50 74 72 3b 0a 2b 09 74 73 64 50 74 72 2d 3e ePtr;.+.tsdPtr->
6d60: 66 69 72 73 74 46 69 6c 65 50 74 72 20 3d 20 69 firstFilePtr = i
6d70: 6e 66 6f 50 74 72 3b 0a 2b 20 20 20 20 7d 20 65 nfoPtr;.+ } e
6d80: 6c 73 65 20 7b 0a 20 20 20 20 20 46 69 6c 65 49 lse {. FileI
6d90: 6e 66 6f 20 2a 2a 6e 65 78 74 50 74 72 50 74 72 nfo **nextPtrPtr
6da0: 3b 0a 20 20 20 20 20 69 6e 74 20 72 65 6d 6f 76 ;. int remov
6db0: 65 64 20 3d 20 30 3b 0a 20 0a 2d 20 20 20 20 69 ed = 0;. .- i
6dc0: 66 20 28 63 68 61 6e 50 74 72 2d 3e 74 79 70 65 f (chanPtr->type
6dd0: 50 74 72 20 21 3d 20 26 66 69 6c 65 43 68 61 6e Ptr != &fileChan
6de0: 6e 65 6c 54 79 70 65 29 20 7b 0a 2d 09 72 65 74 nelType) {.-.ret
6df0: 75 72 6e 3b 0a 2d 20 20 20 20 7d 0a 2d 0a 2d 20 urn;.- }.-.-
6e00: 20 20 20 69 6e 66 6f 50 74 72 20 3d 20 28 46 69 infoPtr = (Fi
6e10: 6c 65 49 6e 66 6f 20 2a 29 20 63 68 61 6e 50 74 leInfo *) chanPt
6e20: 72 2d 3e 69 6e 73 74 61 6e 63 65 44 61 74 61 3b r->instanceData;
6e30: 0a 2d 0a 20 20 20 20 20 66 6f 72 20 28 6e 65 78 .-. for (nex
6e40: 74 50 74 72 50 74 72 20 3d 20 26 28 74 73 64 50 tPtrPtr = &(tsdP
6e50: 74 72 2d 3e 66 69 72 73 74 46 69 6c 65 50 74 72 tr->firstFilePtr
6e60: 29 3b 20 28 2a 6e 65 78 74 50 74 72 50 74 72 29 ); (*nextPtrPtr)
6e70: 20 21 3d 20 4e 55 4c 4c 3b 0a 20 09 20 20 20 20 != NULL;. .
6e80: 6e 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 28 nextPtrPtr = &((
6e90: 2a 6e 65 78 74 50 74 72 50 74 72 29 2d 3e 6e 65 *nextPtrPtr)->ne
6ea0: 78 74 50 74 72 29 29 20 7b 0a 20 09 69 66 20 28 xtPtr)) {. .if (
6eb0: 28 2a 6e 65 78 74 50 74 72 50 74 72 29 20 3d 3d (*nextPtrPtr) ==
6ec0: 20 69 6e 66 6f 50 74 72 29 20 7b 0a 40 40 20 2d infoPtr) {.@@ -
6ed0: 31 34 32 34 2c 34 30 20 2b 31 34 32 36 2c 34 20 1424,40 +1426,4
6ee0: 40 40 0a 20 09 54 63 6c 5f 50 61 6e 69 63 28 22 @@. .Tcl_Panic("
6ef0: 66 69 6c 65 20 69 6e 66 6f 20 70 74 72 20 6e 6f file info ptr no
6f00: 74 20 6f 6e 20 74 68 72 65 61 64 20 63 68 61 6e t on thread chan
6f10: 6e 65 6c 20 6c 69 73 74 22 29 3b 0a 20 20 20 20 nel list");.
6f20: 20 7d 0a 20 7d 0a 2d 0c 0a 2d 2f 2a 0a 2d 20 2a }. }.-..-/*.- *
6f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
6f40: 2d 2d 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 0a 2d 20 2a 0a 2d 20 2a 20 54 ------.- *.- * T
6f80: 63 6c 70 53 70 6c 69 63 65 46 69 6c 65 43 68 61 clpSpliceFileCha
6f90: 6e 6e 65 6c 20 2d 2d 0a 2d 20 2a 0a 2d 20 2a 09 nnel --.- *.- *.
6fa0: 49 6e 73 65 72 74 20 74 68 72 65 61 64 20 6c 6f Insert thread lo
6fb0: 63 61 6c 20 72 65 66 20 66 6f 72 20 74 68 69 73 cal ref for this
6fc0: 20 63 68 61 6e 6e 65 6c 2e 0a 2d 20 2a 09 53 65 channel..- *.Se
6fd0: 65 20 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 6e e Tcl_SpliceChan
6fe0: 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 nel for more inf
6ff0: 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75 6c o..- *.- * Resul
7000: 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d 20 ts:.- *.None..-
7010: 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 66 65 63 *.- * Side effec
7020: 74 73 3a 0a 2d 20 2a 09 43 68 61 6e 67 65 73 20 ts:.- *.Changes
7030: 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 thread local lis
7040: 74 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e 6e t of valid chann
7050: 65 6c 73 2e 0a 2d 20 2a 0a 2d 20 2a 2d 2d 2d 2d els..- *.- *----
7060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
70a0: 2d 2d 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f 69 64 0a --.- */.-.-void.
70b0: 2d 54 63 6c 70 53 70 6c 69 63 65 46 69 6c 65 43 -TclpSpliceFileC
70c0: 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 20 hannel(chan).-
70d0: 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 Tcl_Channel ch
70e0: 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 61 an;.../* The cha
70f0: 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f 76 nnel being remov
7100: 65 64 2e 20 4d 75 73 74 0a 2d 09 09 09 09 09 20 ed. Must.-.....
7110: 2a 20 6e 6f 74 20 62 65 20 72 65 66 65 72 65 6e * not be referen
7120: 63 65 64 20 69 6e 20 61 6e 79 0a 2d 09 09 09 09 ced in any.-....
7130: 09 20 2a 20 69 6e 74 65 72 70 72 65 74 65 72 2e . * interpreter.
7140: 20 2a 2f 0a 2d 7b 0a 2d 20 20 20 20 54 68 72 65 */.-{.- Thre
7150: 61 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a adSpecificData *
7160: 74 73 64 50 74 72 20 3d 20 54 43 4c 5f 54 53 44 tsdPtr = TCL_TSD
7170: 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 79 29 3b _INIT(&dataKey);
7180: 0a 2d 20 20 20 20 43 68 61 6e 6e 65 6c 20 2a 63 .- Channel *c
7190: 68 61 6e 50 74 72 20 3d 20 28 43 68 61 6e 6e 65 hanPtr = (Channe
71a0: 6c 20 2a 29 20 63 68 61 6e 3b 0a 2d 20 20 20 20 l *) chan;.-
71b0: 46 69 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 FileInfo *infoPt
71c0: 72 3b 0a 2d 0a 2d 20 20 20 20 69 66 20 28 63 68 r;.-.- if (ch
71d0: 61 6e 50 74 72 2d 3e 74 79 70 65 50 74 72 20 21 anPtr->typePtr !
71e0: 3d 20 26 66 69 6c 65 43 68 61 6e 6e 65 6c 54 79 = &fileChannelTy
71f0: 70 65 29 20 7b 0a 2d 09 72 65 74 75 72 6e 3b 0a pe) {.-.return;.
7200: 2d 20 20 20 20 7d 0a 2d 0a 2d 20 20 20 20 69 6e - }.-.- in
7210: 66 6f 50 74 72 20 3d 20 28 46 69 6c 65 49 6e 66 foPtr = (FileInf
7220: 6f 20 2a 29 20 63 68 61 6e 50 74 72 2d 3e 69 6e o *) chanPtr->in
7230: 73 74 61 6e 63 65 44 61 74 61 3b 0a 2d 0a 2d 20 stanceData;.-.-
7240: 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 78 74 infoPtr->next
7250: 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e 66 69 Ptr = tsdPtr->fi
7260: 72 73 74 46 69 6c 65 50 74 72 3b 0a 2d 20 20 20 rstFilePtr;.-
7270: 20 74 73 64 50 74 72 2d 3e 66 69 72 73 74 46 69 tsdPtr->firstFi
7280: 6c 65 50 74 72 20 3d 20 69 6e 66 6f 50 74 72 3b lePtr = infoPtr;
7290: 0a 20 7d 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 . }.Index: win/t
72a0: 63 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 0a 3d clWinConsole.c.=
72b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
72c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
72d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
72e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
72f0: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 ==.RCS file: /cv
7300: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 sroot/tcl/tcl/wi
7310: 6e 2f 74 63 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e n/tclWinConsole.
7320: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 c,v.retrieving r
7330: 65 76 69 73 69 6f 6e 20 31 2e 31 32 0a 64 69 66 evision 1.12.dif
7340: 66 20 2d 77 20 2d 75 20 2d 72 31 2e 31 32 20 74 f -w -u -r1.12 t
7350: 63 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 0a 2d clWinConsole.c.-
7360: 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 43 6f 6e -- win/tclWinCon
7370: 73 6f 6c 65 2e 63 09 31 30 20 53 65 70 20 32 30 sole.c.10 Sep 20
7380: 30 34 20 30 31 3a 35 32 3a 31 37 20 2d 30 30 30 04 01:52:17 -000
7390: 30 09 31 2e 31 32 0a 2b 2b 2b 20 77 69 6e 2f 74 0.1.12.+++ win/t
73a0: 63 6c 57 69 6e 43 6f 6e 73 6f 6c 65 2e 63 09 32 clWinConsole.c.2
73b0: 36 20 4a 61 6e 20 32 30 30 35 20 32 33 3a 33 36 6 Jan 2005 23:36
73c0: 3a 35 32 20 2d 30 30 30 30 0a 40 40 20 2d 31 34 :52 -0000.@@ -14
73d0: 38 2c 37 20 2b 31 34 38 2c 37 20 40 40 0a 20 73 8,7 +148,7 @@. s
73e0: 74 61 74 69 63 20 76 6f 69 64 09 09 43 6f 6e 73 tatic void..Cons
73f0: 6f 6c 65 45 78 69 74 48 61 6e 64 6c 65 72 28 43 oleExitHandler(C
7400: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 lientData client
7410: 44 61 74 61 29 3b 0a 20 73 74 61 74 69 63 20 69 Data);. static i
7420: 6e 74 09 09 43 6f 6e 73 6f 6c 65 47 65 74 48 61 nt..ConsoleGetHa
7430: 6e 64 6c 65 50 72 6f 63 28 43 6c 69 65 6e 74 44 ndleProc(ClientD
7440: 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 ata instanceData
7450: 2c 0a 20 09 09 09 20 20 20 20 69 6e 74 20 64 69 ,. ... int di
7460: 72 65 63 74 69 6f 6e 2c 20 43 6c 69 65 6e 74 44 rection, ClientD
7470: 61 74 61 20 2a 68 61 6e 64 6c 65 50 74 72 29 3b ata *handlePtr);
7480: 0a 2d 73 74 61 74 69 63 20 54 68 72 65 61 64 53 .-static ThreadS
7490: 70 65 63 69 66 69 63 44 61 74 61 20 2a 43 6f 6e pecificData *Con
74a0: 73 6f 6c 65 49 6e 69 74 28 76 6f 69 64 29 3b 0a soleInit(void);.
74b0: 2b 73 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 +static void
74c0: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 Console
74d0: 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 73 74 61 Init(void);. sta
74e0: 74 69 63 20 69 6e 74 09 09 43 6f 6e 73 6f 6c 65 tic int..Console
74f0: 49 6e 70 75 74 50 72 6f 63 28 43 6c 69 65 6e 74 InputProc(Client
7500: 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 Data instanceDat
7510: 61 2c 20 63 68 61 72 20 2a 62 75 66 2c 0a 20 09 a, char *buf,. .
7520: 09 09 20 20 20 20 69 6e 74 20 74 6f 52 65 61 64 .. int toRead
7530: 2c 20 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 , int *errorCode
7540: 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 );. static int..
7550: 43 6f 6e 73 6f 6c 65 4f 75 74 70 75 74 50 72 6f ConsoleOutputPro
7560: 63 28 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 c(ClientData ins
7570: 74 61 6e 63 65 44 61 74 61 2c 0a 40 40 20 2d 31 tanceData,.@@ -1
7580: 36 30 2c 36 20 2b 31 36 30 2c 39 20 40 40 0a 20 60,6 +160,9 @@.
7590: 73 74 61 74 69 63 20 76 6f 69 64 09 09 50 72 6f static void..Pro
75a0: 63 45 78 69 74 48 61 6e 64 6c 65 72 28 43 6c 69 cExitHandler(Cli
75b0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 entData clientDa
75c0: 74 61 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74 ta);. static int
75d0: 09 09 57 61 69 74 46 6f 72 52 65 61 64 28 43 6f ..WaitForRead(Co
75e0: 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 nsoleInfo *infoP
75f0: 74 72 2c 20 69 6e 74 20 62 6c 6f 63 6b 69 6e 67 tr, int blocking
7600: 29 3b 0a 20 0a 2b 73 74 61 74 69 63 20 76 6f 69 );. .+static voi
7610: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f d Co
7620: 6e 73 6f 6c 65 54 68 72 65 61 64 41 63 74 69 6f nsoleThreadActio
7630: 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 nProc _ANSI_ARGS
7640: 5f 20 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 _ ((.+... Clie
7650: 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 ntData instanceD
7660: 61 74 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 ata, int action)
7670: 29 3b 0a 2b 0a 20 2f 2a 0a 20 20 2a 20 54 68 69 );.+. /*. * Thi
7680: 73 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 s structure desc
7690: 72 69 62 65 73 20 74 68 65 20 63 68 61 6e 6e 65 ribes the channe
76a0: 6c 20 74 79 70 65 20 73 74 72 75 63 74 75 72 65 l type structure
76b0: 20 66 6f 72 20 63 6f 6d 6d 61 6e 64 20 63 6f 6e for command con
76c0: 73 6f 6c 65 0a 20 20 2a 20 62 61 73 65 64 20 49 sole. * based I
76d0: 4f 2e 0a 40 40 20 2d 31 36 37 2c 37 20 2b 31 37 O..@@ -167,7 +17
76e0: 30 2c 37 20 40 40 0a 20 0a 20 73 74 61 74 69 63 0,7 @@. . static
76f0: 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 Tcl_ChannelType
7700: 20 63 6f 6e 73 6f 6c 65 43 68 61 6e 6e 65 6c 54 consoleChannelT
7710: 79 70 65 20 3d 20 7b 0a 20 20 20 20 20 22 63 6f ype = {. "co
7720: 6e 73 6f 6c 65 22 2c 09 09 09 2f 2a 20 54 79 70 nsole",.../* Typ
7730: 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 20 20 20 e name. */.-
7740: 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 TCL_CHANNEL_VERS
7750: 49 4f 4e 5f 32 2c 09 2f 2a 20 76 32 20 63 68 61 ION_2,./* v2 cha
7760: 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 20 20 54 43 4c nnel */.+ TCL
7770: 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 49 4f 4e _CHANNEL_VERSION
7780: 5f 34 2c 09 2f 2a 20 76 34 20 63 68 61 6e 6e 65 _4,./* v4 channe
7790: 6c 20 2a 2f 0a 20 20 20 20 20 43 6f 6e 73 6f 6c l */. Consol
77a0: 65 43 6c 6f 73 65 50 72 6f 63 2c 09 09 2f 2a 20 eCloseProc,../*
77b0: 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a 20 Close proc. */.
77c0: 20 20 20 20 43 6f 6e 73 6f 6c 65 49 6e 70 75 74 ConsoleInput
77d0: 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 Proc,../* Input
77e0: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 43 6f proc. */. Co
77f0: 6e 73 6f 6c 65 4f 75 74 70 75 74 50 72 6f 63 2c nsoleOutputProc,
7800: 09 09 2f 2a 20 4f 75 74 70 75 74 20 70 72 6f 63 ../* Output proc
7810: 2e 20 2a 2f 0a 40 40 20 2d 31 38 30 2c 36 20 2b . */.@@ -180,6 +
7820: 31 38 33 2c 38 20 40 40 0a 20 20 20 20 20 43 6f 183,8 @@. Co
7830: 6e 73 6f 6c 65 42 6c 6f 63 6b 4d 6f 64 65 50 72 nsoleBlockModePr
7840: 6f 63 2c 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b oc,./* Set block
7850: 69 6e 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 6b ing or non-block
7860: 69 6e 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 20 ing mode.*/.
7870: 20 4e 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 NULL,.../* flus
7880: 68 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 h proc. */.
7890: 4e 55 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c NULL,.../* handl
78a0: 65 72 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 er proc. */.+
78b0: 20 4e 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 NULL,
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 /*
78d0: 77 69 64 65 20 73 65 65 6b 20 70 72 6f 63 20 2a wide seek proc *
78e0: 2f 0a 2b 20 20 20 20 43 6f 6e 73 6f 6c 65 54 68 /.+ ConsoleTh
78f0: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 2c 20 readActionProc,
7900: 20 20 20 2f 2a 20 74 68 72 65 61 64 20 61 63 74 /* thread act
7910: 69 6f 6e 20 70 72 6f 63 20 2a 2f 0a 20 7d 3b 0a ion proc */. };.
7920: 20 0c 0a 20 2f 2a 0a 40 40 20 2d 31 39 38 2c 37 .. /*.@@ -198,7
7930: 20 2b 32 30 33 2c 37 20 40 40 0a 20 20 2a 2d 2d +203,7 @@. *--
7940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7980: 2d 2d 2d 2d 0a 20 20 2a 2f 0a 20 0a 2d 73 74 61 ----. */. .-sta
7990: 74 69 63 20 54 68 72 65 61 64 53 70 65 63 69 66 tic ThreadSpecif
79a0: 69 63 44 61 74 61 20 2a 0a 2b 73 74 61 74 69 63 icData *.+static
79b0: 20 76 6f 69 64 0a 20 43 6f 6e 73 6f 6c 65 49 6e void. ConsoleIn
79c0: 69 74 28 29 0a 20 7b 0a 20 20 20 20 20 54 68 72 it(). {. Thr
79d0: 65 61 64 53 70 65 63 69 66 69 63 44 61 74 61 20 eadSpecificData
79e0: 2a 74 73 64 50 74 72 3b 0a 40 40 20 2d 32 32 34 *tsdPtr;.@@ -224
79f0: 2c 37 20 2b 32 32 39 2c 36 20 40 40 0a 20 09 54 ,7 +229,6 @@. .T
7a00: 63 6c 5f 43 72 65 61 74 65 45 76 65 6e 74 53 6f cl_CreateEventSo
7a10: 75 72 63 65 28 43 6f 6e 73 6f 6c 65 53 65 74 75 urce(ConsoleSetu
7a20: 70 50 72 6f 63 2c 20 43 6f 6e 73 6f 6c 65 43 68 pProc, ConsoleCh
7a30: 65 63 6b 50 72 6f 63 2c 20 4e 55 4c 4c 29 3b 0a eckProc, NULL);.
7a40: 20 09 54 63 6c 5f 43 72 65 61 74 65 54 68 72 65 .Tcl_CreateThre
7a50: 61 64 45 78 69 74 48 61 6e 64 6c 65 72 28 43 6f adExitHandler(Co
7a60: 6e 73 6f 6c 65 45 78 69 74 48 61 6e 64 6c 65 72 nsoleExitHandler
7a70: 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 7d 0a , NULL);. }.
7a80: 2d 20 20 20 20 72 65 74 75 72 6e 20 74 73 64 50 - return tsdP
7a90: 74 72 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 tr;. }. .. /*.@@
7aa0: 20 2d 31 31 36 39 2c 37 20 2b 31 31 37 33 2c 31 -1169,7 +1173,1
7ab0: 30 20 40 40 0a 20 09 20 2a 2f 0a 20 0a 20 09 54 0 @@. . */. . .T
7ac0: 63 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 26 63 6f cl_MutexLock(&co
7ad0: 6e 73 6f 6c 65 4d 75 74 65 78 29 3b 0a 2b 09 69 nsoleMutex);.+.i
7ae0: 66 20 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 f (infoPtr->thre
7af0: 61 64 49 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a adId != NULL) {.
7b00: 2b 09 20 20 20 20 2f 2a 20 54 49 50 20 23 32 31 +. /* TIP #21
7b10: 38 2e 20 57 68 65 6e 20 69 6e 20 66 6c 69 67 68 8. When in fligh
7b20: 74 20 69 67 6e 6f 72 65 20 74 68 65 20 65 76 65 t ignore the eve
7b30: 6e 74 2c 20 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 nt, no one will
7b40: 72 65 63 65 69 76 65 20 69 74 20 61 6e 79 77 61 receive it anywa
7b50: 79 20 2a 2f 0a 20 09 54 63 6c 5f 54 68 72 65 61 y */. .Tcl_Threa
7b60: 64 41 6c 65 72 74 28 69 6e 66 6f 50 74 72 2d 3e dAlert(infoPtr->
7b70: 74 68 72 65 61 64 49 64 29 3b 0a 2b 09 7d 0a 20 threadId);.+.}.
7b80: 09 54 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b .Tcl_MutexUnlock
7b90: 28 26 63 6f 6e 73 6f 6c 65 4d 75 74 65 78 29 3b (&consoleMutex);
7ba0: 0a 20 20 20 20 20 7d 0a 20 0a 40 40 20 2d 31 32 . }. .@@ -12
7bb0: 35 35 2c 37 20 2b 31 32 36 32 2c 31 30 20 40 40 55,7 +1262,10 @@
7bc0: 0a 20 09 20 2a 2f 0a 20 0a 20 09 54 63 6c 5f 4d . . */. . .Tcl_M
7bd0: 75 74 65 78 4c 6f 63 6b 28 26 63 6f 6e 73 6f 6c utexLock(&consol
7be0: 65 4d 75 74 65 78 29 3b 0a 2b 09 69 66 20 28 69 eMutex);.+.if (i
7bf0: 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 nfoPtr->threadId
7c00: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 != NULL) {.+.
7c10: 20 20 2f 2a 20 54 49 50 20 23 32 31 38 2e 20 57 /* TIP #218. W
7c20: 68 65 6e 20 69 6e 20 66 6c 69 67 68 74 20 69 67 hen in flight ig
7c30: 6e 6f 72 65 20 74 68 65 20 65 76 65 6e 74 2c 20 nore the event,
7c40: 6e 6f 20 6f 6e 65 20 77 69 6c 6c 20 72 65 63 65 no one will rece
7c50: 69 76 65 20 69 74 20 61 6e 79 77 61 79 20 2a 2f ive it anyway */
7c60: 0a 20 09 54 63 6c 5f 54 68 72 65 61 64 41 6c 65 . .Tcl_ThreadAle
7c70: 72 74 28 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 rt(infoPtr->thre
7c80: 61 64 49 64 29 3b 0a 2b 09 7d 0a 20 09 54 63 6c adId);.+.}. .Tcl
7c90: 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 63 6f _MutexUnlock(&co
7ca0: 6e 73 6f 6c 65 4d 75 74 65 78 29 3b 0a 20 20 20 nsoleMutex);.
7cb0: 20 20 7d 0a 20 0a 40 40 20 2d 31 32 39 30 2c 31 }. .@@ -1290,1
7cc0: 30 20 2b 31 33 30 30 2c 39 20 40 40 0a 20 7b 0a 0 +1300,9 @@. {.
7cd0: 20 20 20 20 20 63 68 61 72 20 65 6e 63 6f 64 69 char encodi
7ce0: 6e 67 5b 34 20 2b 20 54 43 4c 5f 49 4e 54 45 47 ng[4 + TCL_INTEG
7cf0: 45 52 5f 53 50 41 43 45 5d 3b 0a 20 20 20 20 20 ER_SPACE];.
7d00: 43 6f 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e 66 ConsoleInfo *inf
7d10: 6f 50 74 72 3b 0a 2d 20 20 20 20 54 68 72 65 61 oPtr;.- Threa
7d20: 64 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 dSpecificData *t
7d30: 73 64 50 74 72 3b 0a 20 20 20 20 20 44 57 4f 52 sdPtr;. DWOR
7d40: 44 20 69 64 2c 20 6d 6f 64 65 73 3b 0a 20 0a 2d D id, modes;. .-
7d50: 20 20 20 20 74 73 64 50 74 72 20 3d 20 43 6f 6e tsdPtr = Con
7d60: 73 6f 6c 65 49 6e 69 74 28 29 3b 0a 2b 20 20 20 soleInit();.+
7d70: 20 43 6f 6e 73 6f 6c 65 49 6e 69 74 28 29 3b 0a ConsoleInit();.
7d80: 20 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 . /*.
7d90: 2a 20 53 65 65 20 69 66 20 61 20 63 68 61 6e 6e * See if a chann
7da0: 65 6c 20 77 69 74 68 20 74 68 69 73 20 68 61 6e el with this han
7db0: 64 6c 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 dle already exis
7dc0: 74 73 2e 0a 40 40 20 2d 31 33 30 34 2c 39 20 2b ts..@@ -1304,9 +
7dd0: 31 33 31 33 2c 31 32 20 40 40 0a 20 0a 20 20 20 1313,12 @@. .
7de0: 20 20 69 6e 66 6f 50 74 72 2d 3e 76 61 6c 69 64 infoPtr->valid
7df0: 4d 61 73 6b 20 3d 20 70 65 72 6d 69 73 73 69 6f Mask = permissio
7e00: 6e 73 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 ns;. infoPtr
7e10: 2d 3e 68 61 6e 64 6c 65 20 3d 20 68 61 6e 64 6c ->handle = handl
7e20: 65 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 2d e;.+ infoPtr-
7e30: 3e 63 68 61 6e 6e 65 6c 20 3d 20 28 54 63 6c 5f >channel = (Tcl_
7e40: 43 68 61 6e 6e 65 6c 29 20 4e 55 4c 4c 3b 0a 20 Channel) NULL;.
7e50: 0a 20 20 20 20 20 77 73 70 72 69 6e 74 66 41 28 . wsprintfA(
7e60: 65 6e 63 6f 64 69 6e 67 2c 20 22 63 70 25 64 22 encoding, "cp%d"
7e70: 2c 20 47 65 74 43 6f 6e 73 6f 6c 65 43 50 28 29 , GetConsoleCP()
7e80: 29 3b 0a 20 0a 2b 20 20 20 20 69 6e 66 6f 50 74 );. .+ infoPt
7e90: 72 2d 3e 74 68 72 65 61 64 49 64 20 3d 20 54 63 r->threadId = Tc
7ea0: 6c 5f 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 l_GetCurrentThre
7eb0: 61 64 28 29 3b 0a 2b 0a 20 20 20 20 20 2f 2a 0a ad();.+. /*.
7ec0: 20 20 20 20 20 20 2a 20 55 73 65 20 74 68 65 20 * Use the
7ed0: 70 6f 69 6e 74 65 72 20 66 6f 72 20 74 68 65 20 pointer for the
7ee0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 72 65 73 75 name of the resu
7ef0: 6c 74 20 63 68 61 6e 6e 65 6c 2e 0a 20 20 20 20 lt channel..
7f00: 20 20 2a 20 54 68 69 73 20 6b 65 65 70 73 20 74 * This keeps t
7f10: 68 65 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 73 he channel names
7f20: 20 75 6e 69 71 75 65 2c 20 73 69 6e 63 65 20 73 unique, since s
7f30: 6f 6d 65 20 6d 61 79 20 73 68 61 72 65 0a 40 40 ome may share.@@
7f40: 20 2d 31 33 31 38 2c 38 20 2b 31 33 33 30 2c 36 -1318,8 +1330,6
7f50: 20 40 40 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 @@. infoPtr
7f60: 2d 3e 63 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f ->channel = Tcl_
7f70: 43 72 65 61 74 65 43 68 61 6e 6e 65 6c 28 26 63 CreateChannel(&c
7f80: 6f 6e 73 6f 6c 65 43 68 61 6e 6e 65 6c 54 79 70 onsoleChannelTyp
7f90: 65 2c 20 63 68 61 6e 6e 65 6c 4e 61 6d 65 2c 0a e, channelName,.
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 43 6c (Cl
7fb0: 69 65 6e 74 44 61 74 61 29 20 69 6e 66 6f 50 74 ientData) infoPt
7fc0: 72 2c 20 70 65 72 6d 69 73 73 69 6f 6e 73 29 3b r, permissions);
7fd0: 0a 20 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d . .- infoPtr-
7fe0: 3e 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f >threadId = Tcl_
7ff0: 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 64 GetCurrentThread
8000: 28 29 3b 0a 2d 0a 20 20 20 20 20 69 66 20 28 70 ();.-. if (p
8010: 65 72 6d 69 73 73 69 6f 6e 73 20 26 20 54 43 4c ermissions & TCL
8020: 5f 52 45 41 44 41 42 4c 45 29 20 7b 0a 20 09 2f _READABLE) {. ./
8030: 2a 0a 20 09 20 2a 20 4d 61 6b 65 20 73 75 72 65 *. . * Make sure
8040: 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 69 6e 70 the console inp
8050: 75 74 20 62 75 66 66 65 72 20 69 73 20 72 65 61 ut buffer is rea
8060: 64 79 20 66 6f 72 20 6f 6e 6c 79 20 63 68 61 72 dy for only char
8070: 61 63 74 65 72 0a 40 40 20 2d 31 33 36 30 2c 33 acter.@@ -1360,3
8080: 20 2b 31 33 37 30 2c 35 31 20 40 40 0a 20 0a 20 +1370,51 @@. .
8090: 20 20 20 20 72 65 74 75 72 6e 20 69 6e 66 6f 50 return infoP
80a0: 74 72 2d 3e 63 68 61 6e 6e 65 6c 3b 0a 20 7d 0a tr->channel;. }.
80b0: 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d +..+/*.+ *------
80c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
80d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
80e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
80f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8100: 0a 2b 20 2a 0a 2b 20 2a 20 43 6f 6e 73 6f 6c 65 .+ *.+ * Console
8110: 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 ThreadActionProc
8120: 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e 73 65 --.+ *.+ *.Inse
8130: 72 74 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 rt or remove any
8140: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 thread local re
8150: 66 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e fs to this chann
8160: 65 6c 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 el..+ *.+ * Resu
8170: 6c 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b lts:.+ *.None..+
8180: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 *.+ * Side effe
8190: 63 74 73 3a 0a 2b 20 2a 09 43 68 61 6e 67 65 73 cts:.+ *.Changes
81a0: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 thread local li
81b0: 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e st of valid chan
81c0: 6e 65 6c 73 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d nels..+ *.+ *---
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 2d ----------------
8210: 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 ---.+ */.+.+stat
8220: 69 63 20 76 6f 69 64 0a 2b 43 6f 6e 73 6f 6c 65 ic void.+Console
8230: 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 ThreadActionProc
8240: 20 28 69 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 (instanceData,
8250: 61 63 74 69 6f 6e 29 0a 2b 20 20 20 20 20 43 6c action).+ Cl
8260: 69 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 ientData instanc
8270: 65 44 61 74 61 3b 0a 2b 20 20 20 20 20 69 6e 74 eData;.+ int
8280: 20 61 63 74 69 6f 6e 3b 0a 2b 7b 0a 2b 20 20 20 action;.+{.+
8290: 20 43 6f 6e 73 6f 6c 65 49 6e 66 6f 20 2a 69 6e ConsoleInfo *in
82a0: 66 6f 50 74 72 20 3d 20 28 43 6f 6e 73 6f 6c 65 foPtr = (Console
82b0: 49 6e 66 6f 20 2a 29 20 69 6e 73 74 61 6e 63 65 Info *) instance
82c0: 44 61 74 61 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 20 Data;.+.+ /*
82d0: 57 65 20 64 6f 20 6e 6f 74 20 61 63 63 65 73 73 We do not access
82e0: 20 66 69 72 73 74 43 6f 6e 73 6f 6c 65 50 74 72 firstConsolePtr
82f0: 20 69 6e 20 74 68 65 20 74 68 72 65 61 64 20 73 in the thread s
8300: 74 72 75 63 74 75 72 65 73 2e 20 54 68 69 73 20 tructures. This
8310: 69 73 0a 2b 20 20 20 20 20 2a 20 6e 6f 74 20 66 is.+ * not f
8320: 6f 72 20 61 6c 6c 20 73 65 72 69 61 6c 73 20 6d or all serials m
8330: 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 74 68 anaged by the th
8340: 72 65 61 64 2c 20 62 75 74 20 6f 6e 6c 79 20 74 read, but only t
8350: 68 6f 73 65 20 77 65 20 61 72 65 0a 2b 20 20 20 hose we are.+
8360: 20 20 2a 20 77 61 74 63 68 69 6e 67 2e 20 52 65 * watching. Re
8370: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 20 66 69 6c moval of the fil
8380: 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 62 event handlers b
8390: 65 66 6f 72 65 20 74 72 61 6e 73 66 65 72 20 74 efore transfer t
83a0: 68 75 73 0a 2b 20 20 20 20 20 2a 20 74 61 6b 65 hus.+ * take
83b0: 73 20 63 61 72 65 20 6f 66 20 74 68 69 73 20 73 s care of this s
83c0: 74 72 75 63 74 75 72 65 2e 0a 2b 20 20 20 20 20 tructure..+
83d0: 2a 2f 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 */.+.+ Tcl_Mu
83e0: 74 65 78 4c 6f 63 6b 28 26 63 6f 6e 73 6f 6c 65 texLock(&console
83f0: 4d 75 74 65 78 29 3b 0a 2b 20 20 20 20 69 66 20 Mutex);.+ if
8400: 28 61 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 (action == TCL_C
8410: 48 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e HANNEL_THREAD_IN
8420: 53 45 52 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 SERT) {.+
8430: 20 2f 2a 20 57 65 20 63 61 6e 27 74 20 63 6f 70 /* We can't cop
8440: 79 20 74 68 65 20 74 68 72 65 61 64 20 69 6e 66 y the thread inf
8450: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 ormation from th
8460: 65 20 63 68 61 6e 6e 65 6c 20 77 68 65 6e 0a 2b e channel when.+
8470: 09 20 2a 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 . * the channel
8480: 69 73 20 63 72 65 61 74 65 64 2e 20 41 74 20 74 is created. At t
8490: 68 69 73 20 74 69 6d 65 20 74 68 65 20 63 68 61 his time the cha
84a0: 6e 6e 65 6c 20 62 61 63 6b 0a 2b 09 20 2a 20 70 nnel back.+. * p
84b0: 6f 69 6e 74 65 72 20 68 61 73 20 6e 6f 74 20 62 ointer has not b
84c0: 65 65 6e 20 73 65 74 20 79 65 74 2e 20 48 6f 77 een set yet. How
84d0: 65 76 65 72 20 69 6e 20 74 68 61 74 20 63 61 73 ever in that cas
84e0: 65 20 74 68 65 0a 2b 09 20 2a 20 74 68 72 65 61 e the.+. * threa
84f0: 64 49 64 20 68 61 73 20 61 6c 72 65 61 64 79 20 dId has already
8500: 62 65 65 6e 20 73 65 74 20 62 79 20 54 63 6c 70 been set by Tclp
8510: 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 43 68 61 CreateCommandCha
8520: 6e 6e 65 6c 0a 2b 09 20 2a 20 69 74 73 65 6c 66 nnel.+. * itself
8530: 2c 20 73 6f 20 74 68 65 20 73 74 72 75 63 74 75 , so the structu
8540: 72 65 20 69 73 20 73 74 69 6c 6c 20 67 6f 6f 64 re is still good
8550: 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 ..+. */.+.+
8560: 20 20 20 43 6f 6e 73 6f 6c 65 49 6e 69 74 20 28 ConsoleInit (
8570: 29 3b 0a 2b 20 20 20 20 20 20 20 20 69 66 20 28 );.+ if (
8580: 69 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c infoPtr->channel
8590: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 != NULL) {.+.
85a0: 20 20 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 infoPtr->threa
85b0: 64 49 64 20 3d 20 54 63 6c 5f 47 65 74 43 68 61 dId = Tcl_GetCha
85c0: 6e 6e 65 6c 54 68 72 65 61 64 20 28 69 6e 66 6f nnelThread (info
85d0: 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 29 3b 0a 2b Ptr->channel);.+
85e0: 09 7d 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b .}.+ } else {
85f0: 0a 2b 09 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 .+.infoPtr->thre
8600: 61 64 49 64 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 adId = NULL;.+
8610: 20 20 7d 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 74 }.+ Tcl_Mut
8620: 65 78 55 6e 6c 6f 63 6b 28 26 63 6f 6e 73 6f 6c exUnlock(&consol
8630: 65 4d 75 74 65 78 29 3b 0a 2b 7d 0a 49 6e 64 65 eMutex);.+}.Inde
8640: 78 3a 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 x: win/tclWinPip
8650: 65 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d e.c.============
8660: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8670: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8680: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
8690: 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 =======.RCS file
86a0: 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 : /cvsroot/tcl/t
86b0: 63 6c 2f 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 cl/win/tclWinPip
86c0: 65 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 e.c,v.retrieving
86d0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 35 33 0a 64 revision 1.53.d
86e0: 69 66 66 20 2d 77 20 2d 75 20 2d 72 31 2e 35 33 iff -w -u -r1.53
86f0: 20 74 63 6c 57 69 6e 50 69 70 65 2e 63 0a 2d 2d tclWinPipe.c.--
8700: 2d 20 77 69 6e 2f 74 63 6c 57 69 6e 50 69 70 65 - win/tclWinPipe
8710: 2e 63 09 31 20 44 65 63 20 32 30 30 34 20 32 33 .c.1 Dec 2004 23
8720: 3a 31 38 3a 35 35 20 2d 30 30 30 30 09 31 2e 35 :18:55 -0000.1.5
8730: 33 0a 2b 2b 2b 20 77 69 6e 2f 74 63 6c 57 69 6e 3.+++ win/tclWin
8740: 50 69 70 65 2e 63 09 32 36 20 4a 61 6e 20 32 30 Pipe.c.26 Jan 20
8750: 30 35 20 32 33 3a 33 36 3a 35 32 20 2d 30 30 30 05 23:36:52 -000
8760: 30 0a 40 40 20 2d 32 30 35 2c 36 20 2b 32 30 35 0.@@ -205,6 +205
8770: 2c 39 20 40 40 0a 20 73 74 61 74 69 63 20 69 6e ,9 @@. static in
8780: 74 09 09 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 t..TempFileName(
8790: 57 43 48 41 52 20 6e 61 6d 65 5b 4d 41 58 5f 50 WCHAR name[MAX_P
87a0: 41 54 48 5d 29 3b 0a 20 73 74 61 74 69 63 20 69 ATH]);. static i
87b0: 6e 74 09 09 57 61 69 74 46 6f 72 52 65 61 64 28 nt..WaitForRead(
87c0: 50 69 70 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 PipeInfo *infoPt
87d0: 72 2c 20 69 6e 74 20 62 6c 6f 63 6b 69 6e 67 29 r, int blocking)
87e0: 3b 0a 20 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 ;. .+static void
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 69 70 Pip
8800: 65 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 6f eThreadActionPro
8810: 63 20 5f 41 4e 53 49 5f 41 52 47 53 5f 20 28 28 c _ANSI_ARGS_ ((
8820: 0a 2b 09 09 09 20 20 20 43 6c 69 65 6e 74 44 61 .+... ClientDa
8830: 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 2c ta instanceData,
8840: 20 69 6e 74 20 61 63 74 69 6f 6e 29 29 3b 0a 2b int action));.+
8850: 0a 20 2f 2a 0a 20 20 2a 20 54 68 69 73 20 73 74 . /*. * This st
8860: 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65 ructure describe
8870: 73 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 74 79 s the channel ty
8880: 70 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 pe structure for
8890: 20 63 6f 6d 6d 61 6e 64 20 70 69 70 65 0a 20 20 command pipe.
88a0: 2a 20 62 61 73 65 64 20 49 4f 2e 0a 40 40 20 2d * based IO..@@ -
88b0: 32 31 32 2c 37 20 2b 32 31 35 2c 37 20 40 40 0a 212,7 +215,7 @@.
88c0: 20 0a 20 73 74 61 74 69 63 20 54 63 6c 5f 43 68 . static Tcl_Ch
88d0: 61 6e 6e 65 6c 54 79 70 65 20 70 69 70 65 43 68 annelType pipeCh
88e0: 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a 20 20 annelType = {.
88f0: 20 20 20 22 70 69 70 65 22 2c 09 09 09 2f 2a 20 "pipe",.../*
8900: 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a 2d 20 Type name. */.-
8910: 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 TCL_CHANNEL_V
8920: 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 76 32 20 ERSION_2,./* v2
8930: 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 20 20 channel */.+
8940: 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 52 53 TCL_CHANNEL_VERS
8950: 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 68 61 ION_4,./* v4 cha
8960: 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 54 43 4c nnel */. TCL
8970: 5f 43 4c 4f 53 45 32 50 52 4f 43 2c 09 09 2f 2a _CLOSE2PROC,../*
8980: 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 2a 2f 0a Close proc. */.
8990: 20 20 20 20 20 50 69 70 65 49 6e 70 75 74 50 72 PipeInputPr
89a0: 6f 63 2c 09 09 2f 2a 20 49 6e 70 75 74 20 70 72 oc,../* Input pr
89b0: 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 50 69 70 65 oc. */. Pipe
89c0: 4f 75 74 70 75 74 50 72 6f 63 2c 09 09 2f 2a 20 OutputProc,../*
89d0: 4f 75 74 70 75 74 20 70 72 6f 63 2e 20 2a 2f 0a Output proc. */.
89e0: 40 40 20 2d 32 32 35 2c 36 20 2b 32 32 38 2c 38 @@ -225,6 +228,8
89f0: 20 40 40 0a 20 20 20 20 20 50 69 70 65 42 6c 6f @@. PipeBlo
8a00: 63 6b 4d 6f 64 65 50 72 6f 63 2c 09 09 2f 2a 20 ckModeProc,../*
8a10: 53 65 74 20 62 6c 6f 63 6b 69 6e 67 20 6f 72 20 Set blocking or
8a20: 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 non-blocking mod
8a30: 65 2e 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 e.*/. NULL,.
8a40: 09 09 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e ../* flush proc.
8a50: 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 */. NULL,..
8a60: 09 2f 2a 20 68 61 6e 64 6c 65 72 20 70 72 6f 63 ./* handler proc
8a70: 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c 4c 2c 20 . */.+ NULL,
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a90: 20 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73 65 /* wide se
8aa0: 65 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20 20 ek proc */.+
8ab0: 50 69 70 65 54 68 72 65 61 64 41 63 74 69 6f 6e PipeThreadAction
8ac0: 50 72 6f 63 2c 20 20 20 20 20 20 20 2f 2a 20 74 Proc, /* t
8ad0: 68 72 65 61 64 20 61 63 74 69 6f 6e 20 70 72 6f hread action pro
8ae0: 63 20 2a 2f 0a 20 7d 3b 0a 20 0c 0a 20 2f 2a 0a c */. };. .. /*.
8af0: 40 40 20 2d 31 36 39 36 2c 36 20 2b 31 37 30 31 @@ -1696,6 +1701
8b00: 2c 37 20 40 40 0a 20 20 20 20 20 69 6e 66 6f 50 ,7 @@. infoP
8b10: 74 72 2d 3e 77 72 69 74 65 42 75 66 20 3d 20 30 tr->writeBuf = 0
8b20: 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e ;. infoPtr->
8b30: 77 72 69 74 65 42 75 66 4c 65 6e 20 3d 20 30 3b writeBufLen = 0;
8b40: 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 77 . infoPtr->w
8b50: 72 69 74 65 45 72 72 6f 72 20 3d 20 30 3b 0a 2b riteError = 0;.+
8b60: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 63 68 61 infoPtr->cha
8b70: 6e 6e 65 6c 20 3d 20 28 54 63 6c 5f 43 68 61 6e nnel = (Tcl_Chan
8b80: 6e 65 6c 29 20 4e 55 4c 4c 3b 0a 20 0a 20 20 20 nel) NULL;. .
8b90: 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 55 73 65 /*. * Use
8ba0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 64 73 20 one of the fds
8bb0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 associated with
8bc0: 74 68 65 20 63 68 61 6e 6e 65 6c 20 61 73 20 74 the channel as t
8bd0: 68 65 0a 40 40 20 2d 32 39 37 37 2c 37 20 2b 32 he.@@ -2977,7 +2
8be0: 39 38 33 2c 31 30 20 40 40 0a 20 09 20 2a 2f 0a 983,10 @@. . */.
8bf0: 20 0a 20 09 54 63 6c 5f 4d 75 74 65 78 4c 6f 63 . .Tcl_MutexLoc
8c00: 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b 0a 2b k(&pipeMutex);.+
8c10: 09 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e 74 68 .if (infoPtr->th
8c20: 72 65 61 64 49 64 20 21 3d 20 4e 55 4c 4c 29 20 readId != NULL)
8c30: 7b 0a 2b 09 20 20 20 20 2f 2a 20 54 49 50 20 23 {.+. /* TIP #
8c40: 32 31 38 2e 20 57 68 65 6e 20 69 6e 20 66 6c 69 218. When in fli
8c50: 67 68 74 20 69 67 6e 6f 72 65 20 74 68 65 20 65 ght ignore the e
8c60: 76 65 6e 74 2c 20 6e 6f 20 6f 6e 65 20 77 69 6c vent, no one wil
8c70: 6c 20 72 65 63 65 69 76 65 20 69 74 20 61 6e 79 l receive it any
8c80: 77 61 79 20 2a 2f 0a 20 09 54 63 6c 5f 54 68 72 way */. .Tcl_Thr
8c90: 65 61 64 41 6c 65 72 74 28 69 6e 66 6f 50 74 72 eadAlert(infoPtr
8ca0: 2d 3e 74 68 72 65 61 64 49 64 29 3b 0a 2b 09 7d ->threadId);.+.}
8cb0: 0a 20 09 54 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f . .Tcl_MutexUnlo
8cc0: 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b 0a ck(&pipeMutex);.
8cd0: 20 20 20 20 20 7d 0a 20 0a 40 40 20 2d 33 30 36 }. .@@ -306
8ce0: 35 2c 31 30 20 2b 33 30 37 34 2c 36 30 20 40 40 5,10 +3074,60 @@
8cf0: 0a 20 09 20 2a 2f 0a 20 0a 20 09 54 63 6c 5f 4d . . */. . .Tcl_M
8d00: 75 74 65 78 4c 6f 63 6b 28 26 70 69 70 65 4d 75 utexLock(&pipeMu
8d10: 74 65 78 29 3b 0a 2b 09 69 66 20 28 69 6e 66 6f tex);.+.if (info
8d20: 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20 21 3d Ptr->threadId !=
8d30: 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 2f NULL) {.+. /
8d40: 2a 20 54 49 50 20 23 32 31 38 2e 20 57 68 65 6e * TIP #218. When
8d50: 20 69 6e 20 66 6c 69 67 68 74 20 69 67 6e 6f 72 in flight ignor
8d60: 65 20 74 68 65 20 65 76 65 6e 74 2c 20 6e 6f 20 e the event, no
8d70: 6f 6e 65 20 77 69 6c 6c 20 72 65 63 65 69 76 65 one will receive
8d80: 20 69 74 20 61 6e 79 77 61 79 20 2a 2f 0a 20 09 it anyway */. .
8d90: 54 63 6c 5f 54 68 72 65 61 64 41 6c 65 72 74 28 Tcl_ThreadAlert(
8da0: 69 6e 66 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 infoPtr->threadI
8db0: 64 29 3b 0a 2b 09 7d 0a 20 09 54 63 6c 5f 4d 75 d);.+.}. .Tcl_Mu
8dc0: 74 65 78 55 6e 6c 6f 63 6b 28 26 70 69 70 65 4d texUnlock(&pipeM
8dd0: 75 74 65 78 29 3b 0a 20 20 20 20 20 7d 0a 20 0a utex);. }. .
8de0: 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 return 0;.
8df0: 7d 0a 20 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d }. .+/*.+ *-----
8e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8e40: 2d 0a 2b 20 2a 0a 2b 20 2a 20 50 69 70 65 54 68 -.+ *.+ * PipeTh
8e50: 72 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2d readActionProc -
8e60: 2d 0a 2b 20 2a 0a 2b 20 2a 09 49 6e 73 65 72 74 -.+ *.+ *.Insert
8e70: 20 6f 72 20 72 65 6d 6f 76 65 20 61 6e 79 20 74 or remove any t
8e80: 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 hread local refs
8e90: 20 74 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c to this channel
8ea0: 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 ..+ *.+ * Result
8eb0: 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a s:.+ *.None..+ *
8ec0: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 .+ * Side effect
8ed0: 73 3a 0a 2b 20 2a 09 43 68 61 6e 67 65 73 20 74 s:.+ *.Changes t
8ee0: 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74 hread local list
8ef0: 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e 6e 65 of valid channe
8f00: 6c 73 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d ls..+ *.+ *-----
8f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
8f50: 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 -.+ */.+.+static
8f60: 20 76 6f 69 64 0a 2b 50 69 70 65 54 68 72 65 61 void.+PipeThrea
8f70: 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 69 6e 73 dActionProc (ins
8f80: 74 61 6e 63 65 44 61 74 61 2c 20 61 63 74 69 6f tanceData, actio
8f90: 6e 29 0a 2b 20 20 20 20 20 43 6c 69 65 6e 74 44 n).+ ClientD
8fa0: 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 ata instanceData
8fb0: 3b 0a 2b 20 20 20 20 20 69 6e 74 20 61 63 74 69 ;.+ int acti
8fc0: 6f 6e 3b 0a 2b 7b 0a 2b 20 20 20 20 50 69 70 65 on;.+{.+ Pipe
8fd0: 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 20 3d 20 Info *infoPtr =
8fe0: 28 50 69 70 65 49 6e 66 6f 20 2a 29 20 69 6e 73 (PipeInfo *) ins
8ff0: 74 61 6e 63 65 44 61 74 61 3b 0a 2b 0a 2b 20 20 tanceData;.+.+
9000: 20 20 2f 2a 20 57 65 20 64 6f 20 6e 6f 74 20 61 /* We do not a
9010: 63 63 65 73 73 20 66 69 72 73 74 50 69 70 65 50 ccess firstPipeP
9020: 74 72 20 69 6e 20 74 68 65 20 74 68 72 65 61 64 tr in the thread
9030: 20 73 74 72 75 63 74 75 72 65 73 2e 20 54 68 69 structures. Thi
9040: 73 20 69 73 0a 2b 20 20 20 20 20 2a 20 6e 6f 74 s is.+ * not
9050: 20 66 6f 72 20 61 6c 6c 20 70 69 70 65 73 20 6d for all pipes m
9060: 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 74 68 anaged by the th
9070: 72 65 61 64 2c 20 62 75 74 20 6f 6e 6c 79 20 74 read, but only t
9080: 68 6f 73 65 20 77 65 20 61 72 65 0a 2b 20 20 20 hose we are.+
9090: 20 20 2a 20 77 61 74 63 68 69 6e 67 2e 20 52 65 * watching. Re
90a0: 6d 6f 76 61 6c 20 6f 66 20 74 68 65 20 66 69 6c moval of the fil
90b0: 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 73 20 62 event handlers b
90c0: 65 66 6f 72 65 20 74 72 61 6e 73 66 65 72 20 74 efore transfer t
90d0: 68 75 73 0a 2b 20 20 20 20 20 2a 20 74 61 6b 65 hus.+ * take
90e0: 73 20 63 61 72 65 20 6f 66 20 74 68 69 73 20 73 s care of this s
90f0: 74 72 75 63 74 75 72 65 2e 0a 2b 20 20 20 20 20 tructure..+
9100: 2a 2f 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4d 75 */.+.+ Tcl_Mu
9110: 74 65 78 4c 6f 63 6b 28 26 70 69 70 65 4d 75 74 texLock(&pipeMut
9120: 65 78 29 3b 0a 2b 20 20 20 20 69 66 20 28 61 63 ex);.+ if (ac
9130: 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f 43 48 41 4e tion == TCL_CHAN
9140: 4e 45 4c 5f 54 48 52 45 41 44 5f 49 4e 53 45 52 NEL_THREAD_INSER
9150: 54 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f 2a T) {.+ /*
9160: 20 57 65 20 63 61 6e 27 74 20 63 6f 70 79 20 74 We can't copy t
9170: 68 65 20 74 68 72 65 61 64 20 69 6e 66 6f 72 6d he thread inform
9180: 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 63 ation from the c
9190: 68 61 6e 6e 65 6c 20 77 68 65 6e 0a 2b 09 20 2a hannel when.+. *
91a0: 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 69 73 20 the channel is
91b0: 63 72 65 61 74 65 64 2e 20 41 74 20 74 68 69 73 created. At this
91c0: 20 74 69 6d 65 20 74 68 65 20 63 68 61 6e 6e 65 time the channe
91d0: 6c 20 62 61 63 6b 0a 2b 09 20 2a 20 70 6f 69 6e l back.+. * poin
91e0: 74 65 72 20 68 61 73 20 6e 6f 74 20 62 65 65 6e ter has not been
91f0: 20 73 65 74 20 79 65 74 2e 20 48 6f 77 65 76 65 set yet. Howeve
9200: 72 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 74 r in that case t
9210: 68 65 0a 2b 09 20 2a 20 74 68 72 65 61 64 49 64 he.+. * threadId
9220: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee
9230: 6e 20 73 65 74 20 62 79 20 54 63 6c 70 43 72 65 n set by TclpCre
9240: 61 74 65 43 6f 6d 6d 61 6e 64 43 68 61 6e 6e 65 ateCommandChanne
9250: 6c 0a 2b 09 20 2a 20 69 74 73 65 6c 66 2c 20 73 l.+. * itself, s
9260: 6f 20 74 68 65 20 73 74 72 75 63 74 75 72 65 20 o the structure
9270: 69 73 20 73 74 69 6c 6c 20 67 6f 6f 64 2e 0a 2b is still good..+
9280: 09 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 20 20 20 . */.+.+
9290: 50 69 70 65 49 6e 69 74 20 28 29 3b 0a 2b 20 20 PipeInit ();.+
92a0: 20 20 20 20 20 20 69 66 20 28 69 6e 66 6f 50 74 if (infoPt
92b0: 72 2d 3e 63 68 61 6e 6e 65 6c 20 21 3d 20 4e 55 r->channel != NU
92c0: 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 69 6e 66 6f LL) {.+. info
92d0: 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20 3d 20 Ptr->threadId =
92e0: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 68 Tcl_GetChannelTh
92f0: 72 65 61 64 20 28 69 6e 66 6f 50 74 72 2d 3e 63 read (infoPtr->c
9300: 68 61 6e 6e 65 6c 29 3b 0a 2b 09 7d 0a 2b 20 20 hannel);.+.}.+
9310: 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 69 6e 66 } else {.+.inf
9320: 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 20 3d oPtr->threadId =
9330: 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 7d 0a 2b 20 NULL;.+ }.+
9340: 20 20 20 54 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f Tcl_MutexUnlo
9350: 63 6b 28 26 70 69 70 65 4d 75 74 65 78 29 3b 0a ck(&pipeMutex);.
9360: 2b 7d 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 63 +}.Index: win/tc
9370: 6c 57 69 6e 53 65 72 69 61 6c 2e 63 0a 3d 3d 3d lWinSerial.c.===
9380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
9390: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
93a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
93b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
93c0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
93d0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 77 69 6e 2f oot/tcl/tcl/win/
93e0: 74 63 6c 57 69 6e 53 65 72 69 61 6c 2e 63 2c 76 tclWinSerial.c,v
93f0: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 .retrieving revi
9400: 73 69 6f 6e 20 31 2e 32 38 0a 64 69 66 66 20 2d sion 1.28.diff -
9410: 77 20 2d 75 20 2d 72 31 2e 32 38 20 74 63 6c 57 w -u -r1.28 tclW
9420: 69 6e 53 65 72 69 61 6c 2e 63 0a 2d 2d 2d 20 77 inSerial.c.--- w
9430: 69 6e 2f 74 63 6c 57 69 6e 53 65 72 69 61 6c 2e in/tclWinSerial.
9440: 63 09 31 39 20 41 75 67 20 32 30 30 33 20 31 39 c.19 Aug 2003 19
9450: 3a 33 39 3a 35 36 20 2d 30 30 30 30 09 31 2e 32 :39:56 -0000.1.2
9460: 38 0a 2b 2b 2b 20 77 69 6e 2f 74 63 6c 57 69 6e 8.+++ win/tclWin
9470: 53 65 72 69 61 6c 2e 63 09 32 36 20 4a 61 6e 20 Serial.c.26 Jan
9480: 32 30 30 35 20 32 33 3a 33 36 3a 35 32 20 2d 30 2005 23:36:52 -0
9490: 30 30 30 0a 40 40 20 2d 32 30 30 2c 36 20 2b 32 000.@@ -200,6 +2
94a0: 30 30 2c 39 20 40 40 0a 20 09 09 09 09 20 20 20 00,9 @@. ....
94b0: 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 76 61 6c CONST char *val
94c0: 75 65 29 29 3b 0a 20 73 74 61 74 69 63 20 44 57 ue));. static DW
94d0: 4f 52 44 20 57 49 4e 41 50 49 09 09 53 65 72 69 ORD WINAPI..Seri
94e0: 61 6c 57 72 69 74 65 72 54 68 72 65 61 64 28 4c alWriterThread(L
94f0: 50 56 4f 49 44 20 61 72 67 29 3b 0a 20 0a 2b 73 PVOID arg);. .+s
9500: 74 61 74 69 63 20 76 6f 69 64 20 20 20 20 20 20 tatic void
9510: 20 20 20 20 20 20 20 53 65 72 69 61 6c 54 68 72 SerialThr
9520: 65 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 5f 41 eadActionProc _A
9530: 4e 53 49 5f 41 52 47 53 5f 20 28 28 0a 2b 09 09 NSI_ARGS_ ((.+..
9540: 09 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 . ClientData i
9550: 6e 73 74 61 6e 63 65 44 61 74 61 2c 20 69 6e 74 nstanceData, int
9560: 20 61 63 74 69 6f 6e 29 29 3b 0a 2b 0a 20 2f 2a action));.+. /*
9570: 0a 20 20 2a 20 54 68 69 73 20 73 74 72 75 63 74 . * This struct
9580: 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 ure describes th
9590: 65 20 63 68 61 6e 6e 65 6c 20 74 79 70 65 20 73 e channel type s
95a0: 74 72 75 63 74 75 72 65 20 66 6f 72 20 63 6f 6d tructure for com
95b0: 6d 61 6e 64 20 73 65 72 69 61 6c 0a 20 20 2a 20 mand serial. *
95c0: 62 61 73 65 64 20 49 4f 2e 0a 40 40 20 2d 32 30 based IO..@@ -20
95d0: 37 2c 37 20 2b 32 31 30 2c 37 20 40 40 0a 20 0a 7,7 +210,7 @@. .
95e0: 20 73 74 61 74 69 63 20 54 63 6c 5f 43 68 61 6e static Tcl_Chan
95f0: 6e 65 6c 54 79 70 65 20 73 65 72 69 61 6c 43 68 nelType serialCh
9600: 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b 0a 20 20 annelType = {.
9610: 20 20 20 22 73 65 72 69 61 6c 22 2c 09 09 09 2f "serial",.../
9620: 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 2a 2f 0a * Type name. */.
9630: 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c - TCL_CHANNEL
9640: 5f 56 45 52 53 49 4f 4e 5f 32 2c 09 2f 2a 20 76 _VERSION_2,./* v
9650: 32 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 2b 20 20 2 channel */.+
9660: 20 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 56 45 TCL_CHANNEL_VE
9670: 52 53 49 4f 4e 5f 34 2c 09 2f 2a 20 76 34 20 63 RSION_4,./* v4 c
9680: 68 61 6e 6e 65 6c 20 2a 2f 0a 20 20 20 20 20 53 hannel */. S
9690: 65 72 69 61 6c 43 6c 6f 73 65 50 72 6f 63 2c 09 erialCloseProc,.
96a0: 09 2f 2a 20 43 6c 6f 73 65 20 70 72 6f 63 2e 20 ./* Close proc.
96b0: 2a 2f 0a 20 20 20 20 20 53 65 72 69 61 6c 49 6e */. SerialIn
96c0: 70 75 74 50 72 6f 63 2c 09 09 2f 2a 20 49 6e 70 putProc,../* Inp
96d0: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 ut proc. */.
96e0: 20 53 65 72 69 61 6c 4f 75 74 70 75 74 50 72 6f SerialOutputPro
96f0: 63 2c 09 09 2f 2a 20 4f 75 74 70 75 74 20 70 72 c,../* Output pr
9700: 6f 63 2e 20 2a 2f 0a 40 40 20 2d 32 32 30 2c 36 oc. */.@@ -220,6
9710: 20 2b 32 32 33 2c 38 20 40 40 0a 20 20 20 20 20 +223,8 @@.
9720: 53 65 72 69 61 6c 42 6c 6f 63 6b 50 72 6f 63 2c SerialBlockProc,
9730: 09 09 2f 2a 20 53 65 74 20 62 6c 6f 63 6b 69 6e ../* Set blockin
9740: 67 20 6f 72 20 6e 6f 6e 2d 62 6c 6f 63 6b 69 6e g or non-blockin
9750: 67 20 6d 6f 64 65 2e 2a 2f 0a 20 20 20 20 20 4e g mode.*/. N
9760: 55 4c 4c 2c 09 09 09 2f 2a 20 66 6c 75 73 68 20 ULL,.../* flush
9770: 70 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 4e 55 proc. */. NU
9780: 4c 4c 2c 09 09 09 2f 2a 20 68 61 6e 64 6c 65 72 LL,.../* handler
9790: 20 70 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e proc. */.+ N
97a0: 55 4c 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20 ULL,
97b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 77 69 /* wi
97c0: 64 65 20 73 65 65 6b 20 70 72 6f 63 20 2a 2f 0a de seek proc */.
97d0: 2b 20 20 20 20 53 65 72 69 61 6c 54 68 72 65 61 + SerialThrea
97e0: 64 41 63 74 69 6f 6e 50 72 6f 63 2c 20 20 20 20 dActionProc,
97f0: 20 2f 2a 20 74 68 72 65 61 64 20 61 63 74 69 6f /* thread actio
9800: 6e 20 70 72 6f 63 20 2a 2f 0a 20 7d 3b 0a 20 0c n proc */. };. .
9810: 0a 20 2f 2a 0a 40 40 20 2d 31 33 38 34 2c 37 20 . /*.@@ -1384,7
9820: 2b 31 33 38 39 2c 31 30 20 40 40 0a 20 09 20 2a +1389,10 @@. . *
9830: 2f 0a 20 0a 20 09 54 63 6c 5f 4d 75 74 65 78 4c /. . .Tcl_MutexL
9840: 6f 63 6b 28 26 73 65 72 69 61 6c 4d 75 74 65 78 ock(&serialMutex
9850: 29 3b 0a 2b 09 69 66 20 28 69 6e 66 6f 50 74 72 );.+.if (infoPtr
9860: 2d 3e 74 68 72 65 61 64 49 64 20 21 3d 20 4e 55 ->threadId != NU
9870: 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 2f 2a 20 54 LL) {.+. /* T
9880: 49 50 20 23 32 31 38 2e 20 57 68 65 6e 20 69 6e IP #218. When in
9890: 20 66 6c 69 67 68 74 20 69 67 6e 6f 72 65 20 74 flight ignore t
98a0: 68 65 20 65 76 65 6e 74 2c 20 6e 6f 20 6f 6e 65 he event, no one
98b0: 20 77 69 6c 6c 20 72 65 63 65 69 76 65 20 69 74 will receive it
98c0: 20 61 6e 79 77 61 79 20 2a 2f 0a 20 09 54 63 6c anyway */. .Tcl
98d0: 5f 54 68 72 65 61 64 41 6c 65 72 74 28 69 6e 66 _ThreadAlert(inf
98e0: 6f 50 74 72 2d 3e 74 68 72 65 61 64 49 64 29 3b oPtr->threadId);
98f0: 0a 2b 09 7d 0a 20 09 54 63 6c 5f 4d 75 74 65 78 .+.}. .Tcl_Mutex
9900: 55 6e 6c 6f 63 6b 28 26 73 65 72 69 61 6c 4d 75 Unlock(&serialMu
9910: 74 65 78 29 3b 0a 20 20 20 20 20 7d 0a 20 0a 40 tex);. }. .@
9920: 40 20 2d 31 34 35 38 2c 31 36 20 2b 31 34 36 36 @ -1458,16 +1466
9930: 2c 32 35 20 40 40 0a 20 20 20 20 20 69 6e 74 20 ,25 @@. int
9940: 70 65 72 6d 69 73 73 69 6f 6e 73 3b 0a 20 7b 0a permissions;. {.
9950: 20 20 20 20 20 53 65 72 69 61 6c 49 6e 66 6f 20 SerialInfo
9960: 2a 69 6e 66 6f 50 74 72 3b 0a 2d 20 20 20 20 54 *infoPtr;.- T
9970: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 hreadSpecificDat
9980: 61 20 2a 74 73 64 50 74 72 3b 0a 20 20 20 20 20 a *tsdPtr;.
9990: 44 57 4f 52 44 20 69 64 3b 0a 20 0a 2d 20 20 20 DWORD id;. .-
99a0: 20 74 73 64 50 74 72 20 3d 20 53 65 72 69 61 6c tsdPtr = Serial
99b0: 49 6e 69 74 28 29 3b 0a 2b 20 20 20 20 53 65 72 Init();.+ Ser
99c0: 69 61 6c 49 6e 69 74 28 29 3b 0a 20 0a 20 20 20 ialInit();. .
99d0: 20 20 69 6e 66 6f 50 74 72 20 3d 20 28 53 65 72 infoPtr = (Ser
99e0: 69 61 6c 49 6e 66 6f 20 2a 29 20 63 6b 61 6c 6c ialInfo *) ckall
99f0: 6f 63 28 28 75 6e 73 69 67 6e 65 64 29 20 73 69 oc((unsigned) si
9a00: 7a 65 6f 66 28 53 65 72 69 61 6c 49 6e 66 6f 29 zeof(SerialInfo)
9a10: 29 3b 0a 20 20 20 20 20 6d 65 6d 73 65 74 28 69 );. memset(i
9a20: 6e 66 6f 50 74 72 2c 20 30 2c 20 73 69 7a 65 6f nfoPtr, 0, sizeo
9a30: 66 28 53 65 72 69 61 6c 49 6e 66 6f 29 29 3b 0a f(SerialInfo));.
9a40: 20 0a 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e . infoPtr->
9a50: 76 61 6c 69 64 4d 61 73 6b 20 3d 20 70 65 72 6d validMask = perm
9a60: 69 73 73 69 6f 6e 73 3b 0a 20 20 20 20 20 69 6e issions;. in
9a70: 66 6f 50 74 72 2d 3e 68 61 6e 64 6c 65 20 3d 20 foPtr->handle =
9a80: 68 61 6e 64 6c 65 3b 0a 2b 20 20 20 20 69 6e 66 handle;.+ inf
9a90: 6f 50 74 72 2d 3e 63 68 61 6e 6e 65 6c 20 20 20 oPtr->channel
9aa0: 20 20 20 20 3d 20 28 54 63 6c 5f 43 68 61 6e 6e = (Tcl_Chann
9ab0: 65 6c 29 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 69 el) NULL;.+ i
9ac0: 6e 66 6f 50 74 72 2d 3e 72 65 61 64 61 62 6c 65 nfoPtr->readable
9ad0: 20 20 20 20 20 20 3d 20 30 3b 20 0a 2b 20 20 20 = 0; .+
9ae0: 20 69 6e 66 6f 50 74 72 2d 3e 77 72 69 74 61 62 infoPtr->writab
9af0: 6c 65 20 20 20 20 20 20 3d 20 31 3b 0a 2b 20 20 le = 1;.+
9b00: 20 20 69 6e 66 6f 50 74 72 2d 3e 74 6f 57 72 69 infoPtr->toWri
9b10: 74 65 20 20 20 20 20 20 20 3d 20 69 6e 66 6f 50 te = infoP
9b20: 74 72 2d 3e 77 72 69 74 65 51 75 65 75 65 20 3d tr->writeQueue =
9b30: 20 30 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 72 0;.+ infoPtr
9b40: 2d 3e 62 6c 6f 63 6b 54 69 6d 65 20 20 20 20 20 ->blockTime
9b50: 3d 20 53 45 52 49 41 4c 5f 44 45 46 41 55 4c 54 = SERIAL_DEFAULT
9b60: 5f 42 4c 4f 43 4b 54 49 4d 45 3b 0a 2b 20 20 20 _BLOCKTIME;.+
9b70: 20 69 6e 66 6f 50 74 72 2d 3e 6c 61 73 74 45 76 infoPtr->lastEv
9b80: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 2b 20 20 entTime = 0;.+
9b90: 20 20 69 6e 66 6f 50 74 72 2d 3e 6c 61 73 74 45 infoPtr->lastE
9ba0: 72 72 6f 72 20 20 20 20 20 3d 20 69 6e 66 6f 50 rror = infoP
9bb0: 74 72 2d 3e 65 72 72 6f 72 20 3d 20 30 3b 0a 2b tr->error = 0;.+
9bc0: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 74 68 72 infoPtr->thr
9bd0: 65 61 64 49 64 20 20 20 20 20 20 3d 20 54 63 6c eadId = Tcl
9be0: 5f 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 _GetCurrentThrea
9bf0: 64 28 29 3b 0a 2b 20 20 20 20 69 6e 66 6f 50 74 d();.+ infoPt
9c00: 72 2d 3e 73 79 73 42 75 66 52 65 61 64 20 20 20 r->sysBufRead
9c10: 20 3d 20 34 30 39 36 3b 0a 2b 20 20 20 20 69 6e = 4096;.+ in
9c20: 66 6f 50 74 72 2d 3e 73 79 73 42 75 66 57 72 69 foPtr->sysBufWri
9c30: 74 65 20 20 20 3d 20 34 30 39 36 3b 0a 20 0a 20 te = 4096;. .
9c40: 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 55 /*. * U
9c50: 73 65 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 se the pointer t
9c60: 6f 20 6b 65 65 70 20 74 68 65 20 63 68 61 6e 6e o keep the chann
9c70: 65 6c 20 6e 61 6d 65 73 20 75 6e 69 71 75 65 2c el names unique,
9c80: 20 69 6e 20 63 61 73 65 0a 40 40 20 2d 31 34 37 in case.@@ -147
9c90: 39 2c 31 34 20 2b 31 34 39 36 2c 36 20 40 40 0a 9,14 +1496,6 @@.
9ca0: 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 63 68 infoPtr->ch
9cb0: 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 43 72 65 61 annel = Tcl_Crea
9cc0: 74 65 43 68 61 6e 6e 65 6c 28 26 73 65 72 69 61 teChannel(&seria
9cd0: 6c 43 68 61 6e 6e 65 6c 54 79 70 65 2c 20 63 68 lChannelType, ch
9ce0: 61 6e 6e 65 6c 4e 61 6d 65 2c 0a 20 09 20 20 20 annelName,. .
9cf0: 20 28 43 6c 69 65 6e 74 44 61 74 61 29 20 69 6e (ClientData) in
9d00: 66 6f 50 74 72 2c 20 70 65 72 6d 69 73 73 69 6f foPtr, permissio
9d10: 6e 73 29 3b 0a 20 0a 2d 20 20 20 20 69 6e 66 6f ns);. .- info
9d20: 50 74 72 2d 3e 72 65 61 64 61 62 6c 65 20 3d 20 Ptr->readable =
9d30: 30 3b 20 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 0; .- infoPtr
9d40: 2d 3e 77 72 69 74 61 62 6c 65 20 3d 20 31 3b 0a ->writable = 1;.
9d50: 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 74 6f - infoPtr->to
9d60: 57 72 69 74 65 20 3d 20 69 6e 66 6f 50 74 72 2d Write = infoPtr-
9d70: 3e 77 72 69 74 65 51 75 65 75 65 20 3d 20 30 3b >writeQueue = 0;
9d80: 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 62 .- infoPtr->b
9d90: 6c 6f 63 6b 54 69 6d 65 20 3d 20 53 45 52 49 41 lockTime = SERIA
9da0: 4c 5f 44 45 46 41 55 4c 54 5f 42 4c 4f 43 4b 54 L_DEFAULT_BLOCKT
9db0: 49 4d 45 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 IME;.- infoPt
9dc0: 72 2d 3e 6c 61 73 74 45 76 65 6e 74 54 69 6d 65 r->lastEventTime
9dd0: 20 3d 20 30 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 = 0;.- infoP
9de0: 74 72 2d 3e 6c 61 73 74 45 72 72 6f 72 20 3d 20 tr->lastError =
9df0: 69 6e 66 6f 50 74 72 2d 3e 65 72 72 6f 72 20 3d infoPtr->error =
9e00: 20 30 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 72 0;.- infoPtr
9e10: 2d 3e 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c ->threadId = Tcl
9e20: 5f 47 65 74 43 75 72 72 65 6e 74 54 68 72 65 61 _GetCurrentThrea
9e30: 64 28 29 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 d();.- infoPt
9e40: 72 2d 3e 73 79 73 42 75 66 52 65 61 64 20 3d 20 r->sysBufRead =
9e50: 69 6e 66 6f 50 74 72 2d 3e 73 79 73 42 75 66 57 infoPtr->sysBufW
9e60: 72 69 74 65 20 3d 20 34 30 39 36 3b 0a 20 0a 20 rite = 4096;. .
9e70: 20 20 20 20 53 65 74 75 70 43 6f 6d 6d 28 68 61 SetupComm(ha
9e80: 6e 64 6c 65 2c 20 69 6e 66 6f 50 74 72 2d 3e 73 ndle, infoPtr->s
9e90: 79 73 42 75 66 52 65 61 64 2c 20 69 6e 66 6f 50 ysBufRead, infoP
9ea0: 74 72 2d 3e 73 79 73 42 75 66 57 72 69 74 65 29 tr->sysBufWrite)
9eb0: 3b 0a 20 20 20 20 20 50 75 72 67 65 43 6f 6d 6d ;. PurgeComm
9ec0: 28 68 61 6e 64 6c 65 2c 0a 40 40 20 2d 32 31 35 (handle,.@@ -215
9ed0: 38 2c 33 20 2b 32 31 36 37 2c 35 31 20 40 40 0a 8,3 +2167,51 @@.
9ee0: 20 09 09 22 6d 6f 64 65 20 70 6f 6c 6c 69 6e 74 .."mode pollint
9ef0: 65 72 76 61 6c 20 6c 61 73 74 65 72 72 6f 72 20 erval lasterror
9f00: 71 75 65 75 65 20 73 79 73 62 75 66 66 65 72 20 queue sysbuffer
9f10: 74 74 79 73 74 61 74 75 73 20 78 63 68 61 72 22 ttystatus xchar"
9f20: 29 3b 0a 20 20 20 20 20 7d 0a 20 7d 0a 2b 0c 0a );. }. }.+..
9f30: 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d +/*.+ *---------
9f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
9f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
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 0a 2b 20 -------------.+
9f80: 2a 0a 2b 20 2a 20 53 65 72 69 61 6c 54 68 72 65 *.+ * SerialThre
9f90: 61 64 41 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a adActionProc --.
9fa0: 2b 20 2a 0a 2b 20 2a 09 49 6e 73 65 72 74 20 6f + *.+ *.Insert o
9fb0: 72 20 72 65 6d 6f 76 65 20 61 6e 79 20 74 68 72 r remove any thr
9fc0: 65 61 64 20 6c 6f 63 61 6c 20 72 65 66 73 20 74 ead local refs t
9fd0: 6f 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a o this channel..
9fe0: 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a + *.+ * Results:
9ff0: 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b .+ *.None..+ *.+
a000: 20 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a * Side effects:
a010: 0a 2b 20 2a 09 43 68 61 6e 67 65 73 20 74 68 72 .+ *.Changes thr
a020: 65 61 64 20 6c 6f 63 61 6c 20 6c 69 73 74 20 6f ead local list o
a030: 66 20 76 61 6c 69 64 20 63 68 61 6e 6e 65 6c 73 f valid channels
a040: 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d ..+ *.+ *-------
a050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
a080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
a090: 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 76 + */.+.+static v
a0a0: 6f 69 64 0a 2b 53 65 72 69 61 6c 54 68 72 65 61 oid.+SerialThrea
a0b0: 64 41 63 74 69 6f 6e 50 72 6f 63 20 28 69 6e 73 dActionProc (ins
a0c0: 74 61 6e 63 65 44 61 74 61 2c 20 61 63 74 69 6f tanceData, actio
a0d0: 6e 29 0a 2b 20 20 20 20 20 43 6c 69 65 6e 74 44 n).+ ClientD
a0e0: 61 74 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 ata instanceData
a0f0: 3b 0a 2b 20 20 20 20 20 69 6e 74 20 61 63 74 69 ;.+ int acti
a100: 6f 6e 3b 0a 2b 7b 0a 2b 20 20 20 20 53 65 72 69 on;.+{.+ Seri
a110: 61 6c 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 20 alInfo *infoPtr
a120: 3d 20 28 53 65 72 69 61 6c 49 6e 66 6f 20 2a 29 = (SerialInfo *)
a130: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b instanceData;.+
a140: 0a 2b 20 20 20 20 2f 2a 20 57 65 20 64 6f 20 6e .+ /* We do n
a150: 6f 74 20 61 63 63 65 73 73 20 66 69 72 73 74 53 ot access firstS
a160: 65 72 69 61 6c 50 74 72 20 69 6e 20 74 68 65 20 erialPtr in the
a170: 74 68 72 65 61 64 20 73 74 72 75 63 74 75 72 65 thread structure
a180: 73 2e 20 54 68 69 73 20 69 73 0a 2b 20 20 20 20 s. This is.+
a190: 20 2a 20 6e 6f 74 20 66 6f 72 20 61 6c 6c 20 73 * not for all s
a1a0: 65 72 69 61 6c 73 20 6d 61 6e 61 67 65 64 20 62 erials managed b
a1b0: 79 20 74 68 65 20 74 68 72 65 61 64 2c 20 62 75 y the thread, bu
a1c0: 74 20 6f 6e 6c 79 20 74 68 6f 73 65 20 77 65 20 t only those we
a1d0: 61 72 65 0a 2b 20 20 20 20 20 2a 20 77 61 74 63 are.+ * watc
a1e0: 68 69 6e 67 2e 20 52 65 6d 6f 76 61 6c 20 6f 66 hing. Removal of
a1f0: 20 74 68 65 20 66 69 6c 65 76 65 6e 74 20 68 61 the filevent ha
a200: 6e 64 6c 65 72 73 20 62 65 66 6f 72 65 20 74 72 ndlers before tr
a210: 61 6e 73 66 65 72 20 74 68 75 73 0a 2b 20 20 20 ansfer thus.+
a220: 20 20 2a 20 74 61 6b 65 73 20 63 61 72 65 20 6f * takes care o
a230: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 f this structure
a240: 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 ..+ */.+.+
a250: 20 20 54 63 6c 5f 4d 75 74 65 78 4c 6f 63 6b 28 Tcl_MutexLock(
a260: 26 73 65 72 69 61 6c 4d 75 74 65 78 29 3b 0a 2b &serialMutex);.+
a270: 20 20 20 20 69 66 20 28 61 63 74 69 6f 6e 20 3d if (action =
a280: 3d 20 54 43 4c 5f 43 48 41 4e 4e 45 4c 5f 54 48 = TCL_CHANNEL_TH
a290: 52 45 41 44 5f 49 4e 53 45 52 54 29 20 7b 0a 2b READ_INSERT) {.+
a2a0: 20 20 20 20 20 20 20 20 2f 2a 20 57 65 20 63 61 /* We ca
a2b0: 6e 27 74 20 63 6f 70 79 20 74 68 65 20 74 68 72 n't copy the thr
a2c0: 65 61 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 ead information
a2d0: 66 72 6f 6d 20 74 68 65 20 63 68 61 6e 6e 65 6c from the channel
a2e0: 20 77 68 65 6e 0a 2b 09 20 2a 20 74 68 65 20 63 when.+. * the c
a2f0: 68 61 6e 6e 65 6c 20 69 73 20 63 72 65 61 74 65 hannel is create
a300: 64 2e 20 41 74 20 74 68 69 73 20 74 69 6d 65 20 d. At this time
a310: 74 68 65 20 63 68 61 6e 6e 65 6c 20 62 61 63 6b the channel back
a320: 0a 2b 09 20 2a 20 70 6f 69 6e 74 65 72 20 68 61 .+. * pointer ha
a330: 73 20 6e 6f 74 20 62 65 65 6e 20 73 65 74 20 79 s not been set y
a340: 65 74 2e 20 48 6f 77 65 76 65 72 20 69 6e 20 74 et. However in t
a350: 68 61 74 20 63 61 73 65 20 74 68 65 0a 2b 09 20 hat case the.+.
a360: 2a 20 74 68 72 65 61 64 49 64 20 68 61 73 20 61 * threadId has a
a370: 6c 72 65 61 64 79 20 62 65 65 6e 20 73 65 74 20 lready been set
a380: 62 79 20 54 63 6c 70 43 72 65 61 74 65 43 6f 6d by TclpCreateCom
a390: 6d 61 6e 64 43 68 61 6e 6e 65 6c 0a 2b 09 20 2a mandChannel.+. *
a3a0: 20 69 74 73 65 6c 66 2c 20 73 6f 20 74 68 65 20 itself, so the
a3b0: 73 74 72 75 63 74 75 72 65 20 69 73 20 73 74 69 structure is sti
a3c0: 6c 6c 20 67 6f 6f 64 2e 0a 2b 09 20 2a 2f 0a 2b ll good..+. */.+
a3d0: 0a 2b 20 20 20 20 20 20 20 20 53 65 72 69 61 6c .+ Serial
a3e0: 49 6e 69 74 20 28 29 3b 0a 2b 20 20 20 20 20 20 Init ();.+
a3f0: 20 20 69 66 20 28 69 6e 66 6f 50 74 72 2d 3e 63 if (infoPtr->c
a400: 68 61 6e 6e 65 6c 20 21 3d 20 4e 55 4c 4c 29 20 hannel != NULL)
a410: 7b 0a 2b 09 20 20 20 20 69 6e 66 6f 50 74 72 2d {.+. infoPtr-
a420: 3e 74 68 72 65 61 64 49 64 20 3d 20 54 63 6c 5f >threadId = Tcl_
a430: 47 65 74 43 68 61 6e 6e 65 6c 54 68 72 65 61 64 GetChannelThread
a440: 20 28 69 6e 66 6f 50 74 72 2d 3e 63 68 61 6e 6e (infoPtr->chann
a450: 65 6c 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d 20 el);.+.}.+ }
a460: 65 6c 73 65 20 7b 0a 2b 09 69 6e 66 6f 50 74 72 else {.+.infoPtr
a470: 2d 3e 74 68 72 65 61 64 49 64 20 3d 20 4e 55 4c ->threadId = NUL
a480: 4c 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 54 L;.+ }.+ T
a490: 63 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 cl_MutexUnlock(&
a4a0: 73 65 72 69 61 6c 4d 75 74 65 78 29 3b 0a 2b 7d serialMutex);.+}
a4b0: 0a 49 6e 64 65 78 3a 20 77 69 6e 2f 74 63 6c 57 .Index: win/tclW
a4c0: 69 6e 53 6f 63 6b 2e 63 0a 3d 3d 3d 3d 3d 3d 3d inSock.c.=======
a4d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a4e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a4f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
a500: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 ============.RCS
a510: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f file: /cvsroot/
a520: 74 63 6c 2f 74 63 6c 2f 77 69 6e 2f 74 63 6c 57 tcl/tcl/win/tclW
a530: 69 6e 53 6f 63 6b 2e 63 2c 76 0a 72 65 74 72 69 inSock.c,v.retri
a540: 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 eving revision 1
a550: 2e 34 34 0a 64 69 66 66 20 2d 77 20 2d 75 20 2d .44.diff -w -u -
a560: 72 31 2e 34 34 20 74 63 6c 57 69 6e 53 6f 63 6b r1.44 tclWinSock
a570: 2e 63 0a 2d 2d 2d 20 77 69 6e 2f 74 63 6c 57 69 .c.--- win/tclWi
a580: 6e 53 6f 63 6b 2e 63 09 36 20 4f 63 74 20 32 30 nSock.c.6 Oct 20
a590: 30 34 20 31 34 3a 33 39 3a 32 30 20 2d 30 30 30 04 14:39:20 -000
a5a0: 30 09 31 2e 34 34 0a 2b 2b 2b 20 77 69 6e 2f 74 0.1.44.+++ win/t
a5b0: 63 6c 57 69 6e 53 6f 63 6b 2e 63 09 32 36 20 4a clWinSock.c.26 J
a5c0: 61 6e 20 32 30 30 35 20 32 33 3a 33 36 3a 35 32 an 2005 23:36:52
a5d0: 20 2d 30 30 30 30 0a 40 40 20 2d 32 36 35 2c 36 -0000.@@ -265,6
a5e0: 20 2b 32 36 35 2c 31 30 20 40 40 0a 20 09 09 09 +265,10 @@. ...
a5f0: 09 69 6e 74 20 2a 65 72 72 6f 72 43 6f 64 65 50 .int *errorCodeP
a600: 74 72 29 29 3b 0a 20 73 74 61 74 69 63 20 44 57 tr));. static DW
a610: 4f 52 44 20 57 49 4e 41 50 49 09 20 20 20 20 53 ORD WINAPI. S
a620: 6f 63 6b 65 74 54 68 72 65 61 64 20 5f 41 4e 53 ocketThread _ANS
a630: 49 5f 41 52 47 53 5f 28 28 4c 50 56 4f 49 44 20 I_ARGS_((LPVOID
a640: 61 72 67 29 29 3b 0a 20 0a 2b 73 74 61 74 69 63 arg));. .+static
a650: 20 76 6f 69 64 20 20 20 20 20 20 20 20 20 20 20 void
a660: 20 20 54 63 70 54 68 72 65 61 64 41 63 74 69 6f TcpThreadActio
a670: 6e 50 72 6f 63 20 5f 41 4e 53 49 5f 41 52 47 53 nProc _ANSI_ARGS
a680: 5f 20 28 28 0a 2b 09 09 09 20 20 20 43 6c 69 65 _ ((.+... Clie
a690: 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65 44 ntData instanceD
a6a0: 61 74 61 2c 20 69 6e 74 20 61 63 74 69 6f 6e 29 ata, int action)
a6b0: 29 3b 0a 2b 0a 2b 0a 20 2f 2a 0a 20 20 2a 20 54 );.+.+. /*. * T
a6c0: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 64 65 his structure de
a6d0: 73 63 72 69 62 65 73 20 74 68 65 20 63 68 61 6e scribes the chan
a6e0: 6e 65 6c 20 74 79 70 65 20 73 74 72 75 63 74 75 nel type structu
a6f0: 72 65 20 66 6f 72 20 54 43 50 20 73 6f 63 6b 65 re for TCP socke
a700: 74 0a 20 20 2a 20 62 61 73 65 64 20 49 4f 2e 0a t. * based IO..
a710: 40 40 20 2d 32 37 32 2c 37 20 2b 32 37 36 2c 37 @@ -272,7 +276,7
a720: 20 40 40 0a 20 0a 20 73 74 61 74 69 63 20 54 63 @@. . static Tc
a730: 6c 5f 43 68 61 6e 6e 65 6c 54 79 70 65 20 74 63 l_ChannelType tc
a740: 70 43 68 61 6e 6e 65 6c 54 79 70 65 20 3d 20 7b pChannelType = {
a750: 0a 20 20 20 20 20 22 74 63 70 22 2c 09 09 20 20 . "tcp",..
a760: 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 2e 20 /* Type name.
a770: 2a 2f 0a 2d 20 20 20 20 54 43 4c 5f 43 48 41 4e */.- TCL_CHAN
a780: 4e 45 4c 5f 56 45 52 53 49 4f 4e 5f 32 2c 20 20 NEL_VERSION_2,
a790: 2f 2a 20 76 32 20 63 68 61 6e 6e 65 6c 20 2a 2f /* v2 channel */
a7a0: 0a 2b 20 20 20 20 54 43 4c 5f 43 48 41 4e 4e 45 .+ TCL_CHANNE
a7b0: 4c 5f 56 45 52 53 49 4f 4e 5f 34 2c 20 20 2f 2a L_VERSION_4, /*
a7c0: 20 76 34 20 63 68 61 6e 6e 65 6c 20 2a 2f 0a 20 v4 channel */.
a7d0: 20 20 20 20 54 63 70 43 6c 6f 73 65 50 72 6f 63 TcpCloseProc
a7e0: 2c 09 20 20 20 20 2f 2a 20 43 6c 6f 73 65 20 70 ,. /* Close p
a7f0: 72 6f 63 2e 20 2a 2f 0a 20 20 20 20 20 54 63 70 roc. */. Tcp
a800: 49 6e 70 75 74 50 72 6f 63 2c 09 20 20 20 20 2f InputProc,. /
a810: 2a 20 49 6e 70 75 74 20 70 72 6f 63 2e 20 2a 2f * Input proc. */
a820: 0a 20 20 20 20 20 54 63 70 4f 75 74 70 75 74 50 . TcpOutputP
a830: 72 6f 63 2c 09 20 20 20 20 2f 2a 20 4f 75 74 70 roc,. /* Outp
a840: 75 74 20 70 72 6f 63 2e 20 2a 2f 0a 40 40 20 2d ut proc. */.@@ -
a850: 32 38 35 2c 36 20 2b 32 38 39 2c 38 20 40 40 0a 285,6 +289,8 @@.
a860: 20 20 20 20 20 54 63 70 42 6c 6f 63 6b 50 72 6f TcpBlockPro
a870: 63 2c 09 20 20 20 20 2f 2a 20 53 65 74 20 73 6f c,. /* Set so
a880: 63 6b 65 74 20 69 6e 74 6f 20 28 6e 6f 6e 2d 29 cket into (non-)
a890: 62 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 20 2a blocking mode. *
a8a0: 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 20 20 /. NULL,..
a8b0: 20 20 2f 2a 20 66 6c 75 73 68 20 70 72 6f 63 2e /* flush proc.
a8c0: 20 2a 2f 0a 20 20 20 20 20 4e 55 4c 4c 2c 09 09 */. NULL,..
a8d0: 20 20 20 20 2f 2a 20 68 61 6e 64 6c 65 72 20 70 /* handler p
a8e0: 72 6f 63 2e 20 2a 2f 0a 2b 20 20 20 20 4e 55 4c roc. */.+ NUL
a8f0: 4c 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 L,
a900: 20 20 20 20 20 2f 2a 20 77 69 64 65 20 73 65 65 /* wide see
a910: 6b 20 70 72 6f 63 20 2a 2f 0a 2b 20 20 20 20 54 k proc */.+ T
a920: 63 70 54 68 72 65 61 64 41 63 74 69 6f 6e 50 72 cpThreadActionPr
a930: 6f 63 2c 20 20 20 20 2f 2a 20 74 68 72 65 61 64 oc, /* thread
a940: 20 61 63 74 69 6f 6e 20 70 72 6f 63 20 2a 2f 0a action proc */.
a950: 20 7d 3b 0a 20 0a 20 0c 0a 40 40 20 2d 39 37 30 };. . ..@@ -970
a960: 2c 37 20 2b 39 37 36 2c 37 20 40 40 0a 20 20 20 ,7 +976,7 @@.
a970: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e Tcl_Interp *in
a980: 74 65 72 70 3b 09 09 2f 2a 20 55 6e 75 73 65 64 terp;../* Unused
a990: 2e 20 2a 2f 0a 20 7b 0a 20 20 20 20 20 53 6f 63 . */. {. Soc
a9a0: 6b 65 74 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 ketInfo *infoPtr
a9b0: 20 3d 20 28 53 6f 63 6b 65 74 49 6e 66 6f 20 2a = (SocketInfo *
a9c0: 29 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a ) instanceData;.
a9d0: 2d 20 20 20 20 53 6f 63 6b 65 74 49 6e 66 6f 20 - SocketInfo
a9e0: 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 2b 20 **nextPtrPtr;.+
a9f0: 20 20 20 2f 2a 20 54 49 50 20 23 32 31 38 20 2a /* TIP #218 *
aa00: 2f 0a 20 20 20 20 20 69 6e 74 20 65 72 72 6f 72 /. int error
aa10: 43 6f 64 65 20 3d 20 30 3b 0a 20 20 20 20 20 54 Code = 0;. T
aa20: 68 72 65 61 64 53 70 65 63 69 66 69 63 44 61 74 hreadSpecificDat
aa30: 61 20 2a 74 73 64 50 74 72 20 3d 20 54 43 4c 5f a *tsdPtr = TCL_
aa40: 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 4b 65 TSD_INIT(&dataKe
aa50: 79 29 3b 0a 20 0a 40 40 20 2d 39 39 35 2c 32 30 y);. .@@ -995,20
aa60: 20 2b 31 30 30 31 2c 31 32 20 40 40 0a 20 20 20 +1001,12 @@.
aa70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 7d 0a 20 }. }.
aa80: 0a 2d 20 20 20 20 2f 2a 0a 2d 20 20 20 20 20 2a .- /*.- *
aa90: 20 52 65 6d 6f 76 65 20 74 68 65 20 73 6f 63 6b Remove the sock
aaa0: 65 74 20 66 72 6f 6d 20 73 6f 63 6b 65 74 4c 69 et from socketLi
aab0: 73 74 2e 0a 2b 20 20 20 20 2f 2a 20 54 49 50 20 st..+ /* TIP
aac0: 23 32 31 38 2e 20 52 65 6d 6f 76 65 64 20 74 68 #218. Removed th
aad0: 65 20 63 6f 64 65 20 72 65 6d 6f 76 69 6e 67 20 e code removing
aae0: 74 68 65 20 73 74 72 75 63 74 75 72 65 0a 2b 20 the structure.+
aaf0: 20 20 20 20 2a 20 66 72 6f 6d 20 74 68 65 20 67 * from the g
ab00: 6c 6f 62 61 6c 20 73 6f 63 6b 65 74 20 6c 69 73 lobal socket lis
ab10: 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 64 t. This is now d
ab20: 6f 6e 65 20 62 79 0a 2b 20 20 20 20 20 2a 20 74 one by.+ * t
ab30: 68 65 20 74 68 72 65 61 64 20 61 63 74 69 6f 6e he thread action
ab40: 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 6e 64 20 callbacks, and
ab50: 6f 6e 6c 79 20 74 68 65 72 65 2e 20 54 68 69 73 only there. This
ab60: 0a 2b 20 20 20 20 20 2a 20 68 61 70 70 65 6e 73 .+ * happens
ab70: 20 62 65 66 6f 72 65 20 74 68 69 73 20 63 6f 64 before this cod
ab80: 65 20 69 73 20 63 61 6c 6c 65 64 2e 20 57 65 20 e is called. We
ab90: 63 61 6e 20 66 72 65 65 0a 2b 20 20 20 20 20 2a can free.+ *
aba0: 20 77 69 74 68 6f 75 74 20 66 65 61 72 20 6f 66 without fear of
abb0: 20 64 61 6d 61 67 69 6e 67 20 74 68 65 20 6c 69 damaging the li
abc0: 73 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 2d 0a 2d st.. */.-.-
abd0: 20 20 20 20 57 61 69 74 46 6f 72 53 69 6e 67 6c WaitForSingl
abe0: 65 4f 62 6a 65 63 74 28 74 73 64 50 74 72 2d 3e eObject(tsdPtr->
abf0: 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63 6b 2c 20 socketListLock,
ac00: 49 4e 46 49 4e 49 54 45 29 3b 0a 2d 20 20 20 20 INFINITE);.-
ac10: 66 6f 72 20 28 6e 65 78 74 50 74 72 50 74 72 20 for (nextPtrPtr
ac20: 3d 20 26 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b = &(tsdPtr->sock
ac30: 65 74 4c 69 73 74 29 3b 20 28 2a 6e 65 78 74 50 etList); (*nextP
ac40: 74 72 50 74 72 29 20 21 3d 20 4e 55 4c 4c 3b 0a trPtr) != NULL;.
ac50: 2d 09 20 6e 65 78 74 50 74 72 50 74 72 20 3d 20 -. nextPtrPtr =
ac60: 26 28 28 2a 6e 65 78 74 50 74 72 50 74 72 29 2d &((*nextPtrPtr)-
ac70: 3e 6e 65 78 74 50 74 72 29 29 20 7b 0a 2d 09 69 >nextPtr)) {.-.i
ac80: 66 20 28 28 2a 6e 65 78 74 50 74 72 50 74 72 29 f ((*nextPtrPtr)
ac90: 20 3d 3d 20 69 6e 66 6f 50 74 72 29 20 7b 0a 2d == infoPtr) {.-
aca0: 09 20 20 20 20 28 2a 6e 65 78 74 50 74 72 50 74 . (*nextPtrPt
acb0: 72 29 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 r) = infoPtr->ne
acc0: 78 74 50 74 72 3b 0a 2d 09 20 20 20 20 62 72 65 xtPtr;.-. bre
acd0: 61 6b 3b 0a 2d 09 7d 0a 2d 20 20 20 20 7d 0a 2d ak;.-.}.- }.-
ace0: 20 20 20 20 0a 2d 20 20 20 20 53 65 74 45 76 65 .- SetEve
acf0: 6e 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 nt(tsdPtr->socke
ad00: 74 4c 69 73 74 4c 6f 63 6b 29 3b 0a 20 20 20 20 tListLock);.
ad10: 20 63 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 ckfree((char *)
ad20: 20 69 6e 66 6f 50 74 72 29 3b 0a 20 20 20 20 20 infoPtr);.
ad30: 72 65 74 75 72 6e 20 65 72 72 6f 72 43 6f 64 65 return errorCode
ad40: 3b 0a 20 7d 0a 40 40 20 2d 31 30 32 35 2c 37 20 ;. }.@@ -1025,7
ad50: 2b 31 30 32 33 2c 37 20 40 40 0a 20 20 2a 09 52 +1023,7 @@. *.R
ad60: 65 74 75 72 6e 73 20 61 20 6e 65 77 6c 79 20 61 eturns a newly a
ad70: 6c 6c 6f 63 61 74 65 64 20 53 6f 63 6b 65 74 49 llocated SocketI
ad80: 6e 66 6f 2e 0a 20 20 2a 0a 20 20 2a 20 53 69 64 nfo.. *. * Sid
ad90: 65 20 65 66 66 65 63 74 73 3a 0a 2d 20 2a 09 41 e effects:.- *.A
ada0: 64 64 73 20 74 68 65 20 73 6f 63 6b 65 74 20 74 dds the socket t
adb0: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 73 6f 63 o the global soc
adc0: 6b 65 74 20 6c 69 73 74 2e 0a 2b 20 2a 09 4e 6f ket list..+ *.No
add0: 6e 65 2c 20 65 78 63 65 70 74 20 66 6f 72 20 61 ne, except for a
ade0: 6c 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 6d 65 6d llocation of mem
adf0: 6f 72 79 2e 0a 20 20 2a 0a 20 20 2a 2d 2d 2d 2d ory.. *. *----
ae00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
ae10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
ae20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
ae30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
ae40: 2d 2d 0a 20 20 2a 2f 0a 40 40 20 2d 31 30 34 39 --. */.@@ -1049
ae50: 2c 31 30 20 2b 31 30 34 37 2c 31 31 20 40 40 0a ,10 +1047,11 @@.
ae60: 20 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 61 63 infoPtr->ac
ae70: 63 65 70 74 50 72 6f 63 44 61 74 61 20 3d 20 4e ceptProcData = N
ae80: 55 4c 4c 3b 0a 20 20 20 20 20 69 6e 66 6f 50 74 ULL;. infoPt
ae90: 72 2d 3e 6c 61 73 74 45 72 72 6f 72 20 3d 20 30 r->lastError = 0
aea0: 3b 0a 20 0a 2d 20 20 20 20 57 61 69 74 46 6f 72 ;. .- WaitFor
aeb0: 53 69 6e 67 6c 65 4f 62 6a 65 63 74 28 74 73 64 SingleObject(tsd
aec0: 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c Ptr->socketListL
aed0: 6f 63 6b 2c 20 49 4e 46 49 4e 49 54 45 29 3b 0a ock, INFINITE);.
aee0: 2d 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6e 65 - infoPtr->ne
aef0: 78 74 50 74 72 20 3d 20 74 73 64 50 74 72 2d 3e xtPtr = tsdPtr->
af00: 73 6f 63 6b 65 74 4c 69 73 74 3b 0a 2d 20 20 20 socketList;.-
af10: 20 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c tsdPtr->socketL
af20: 69 73 74 20 3d 20 69 6e 66 6f 50 74 72 3b 0a 2d ist = infoPtr;.-
af30: 20 20 20 20 53 65 74 45 76 65 6e 74 28 74 73 64 SetEvent(tsd
af40: 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 4c Ptr->socketListL
af50: 6f 63 6b 29 3b 0a 2b 20 20 20 20 2f 2a 20 54 49 ock);.+ /* TI
af60: 50 20 23 32 31 38 2e 20 52 65 6d 6f 76 65 64 20 P #218. Removed
af70: 74 68 65 20 63 6f 64 65 20 69 6e 73 65 72 74 69 the code inserti
af80: 6e 67 20 74 68 65 20 6e 65 77 20 73 74 72 75 63 ng the new struc
af90: 74 75 72 65 0a 2b 20 20 20 20 20 2a 20 69 6e 74 ture.+ * int
afa0: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20 6c 69 73 o the global lis
afb0: 74 2e 20 54 68 69 73 20 69 73 20 6e 6f 77 20 68 t. This is now h
afc0: 61 6e 64 6c 65 64 20 69 6e 20 74 68 65 20 74 68 andled in the th
afd0: 72 65 61 64 0a 2b 20 20 20 20 20 2a 20 61 63 74 read.+ * act
afe0: 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 73 2c 20 61 ion callbacks, a
aff0: 6e 64 20 6f 6e 6c 79 20 74 68 65 72 65 2e 0a 2b nd only there..+
b000: 20 20 20 20 20 2a 2f 0a 2b 20 20 20 20 69 6e 66 */.+ inf
b010: 6f 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 oPtr->nextPtr =
b020: 4e 55 4c 4c 3b 0a 20 20 20 20 20 0a 20 20 20 20 NULL;. .
b030: 20 72 65 74 75 72 6e 20 69 6e 66 6f 50 74 72 3b return infoPtr;
b040: 0a 20 7d 0a 40 40 20 2d 31 30 36 39 2c 37 20 2b . }.@@ -1069,7 +
b050: 31 30 36 38 2c 37 20 40 40 0a 20 20 2a 09 52 65 1068,7 @@. *.Re
b060: 74 75 72 6e 73 20 61 20 6e 65 77 20 53 6f 63 6b turns a new Sock
b070: 65 74 49 6e 66 6f 2c 20 6f 72 20 4e 55 4c 4c 20 etInfo, or NULL
b080: 77 69 74 68 20 61 6e 20 65 72 72 6f 72 20 69 6e with an error in
b090: 20 69 6e 74 65 72 70 2e 0a 20 20 2a 0a 20 20 2a interp.. *. *
b0a0: 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2d Side effects:.-
b0b0: 20 2a 09 41 64 64 73 20 61 20 6e 65 77 20 73 6f *.Adds a new so
b0c0: 63 6b 65 74 20 74 6f 20 74 68 65 20 73 6f 63 6b cket to the sock
b0d0: 65 74 4c 69 73 74 2e 0a 2b 20 2a 09 4e 6f 6e 65 etList..+ *.None
b0e0: 2c 20 65 78 63 65 70 74 20 66 6f 72 20 61 6c 6c , except for all
b0f0: 6f 63 61 74 69 6f 6e 20 6f 66 20 6d 65 6d 6f 72 ocation of memor
b100: 79 2e 0a 20 20 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d y.. *. *------
b110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
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: 0a 20 20 2a 2f 0a 40 40 20 2d 32 36 36 36 2c 31 . */.@@ -2666,1
b160: 35 20 2b 32 36 36 35 2c 31 32 20 40 40 0a 20 20 5 +2665,12 @@.
b170: 20 20 20 72 65 74 75 72 6e 20 77 69 6e 53 6f 63 return winSoc
b180: 6b 2e 67 65 74 73 65 72 76 62 79 6e 61 6d 65 28 k.getservbyname(
b190: 6e 61 6d 65 2c 20 70 72 6f 74 6f 29 3b 0a 20 7d name, proto);. }
b1a0: 0a 20 0a 2d 0a 2d 0c 0a 20 2f 2a 0a 20 20 2a 2d . .-.-.. /*. *-
b1b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b1c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b1d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b1e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b1f0: 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2d 20 2a 20 54 63 -----. *.- * Tc
b200: 6c 70 43 75 74 53 6f 63 6b 43 68 61 6e 6e 65 6c lpCutSockChannel
b210: 20 2d 2d 0a 2b 20 2a 20 54 63 70 54 68 72 65 61 --.+ * TcpThrea
b220: 64 41 63 74 69 6f 6e 50 72 6f 63 20 2d 2d 0a 20 dActionProc --.
b230: 20 2a 0a 2d 20 2a 09 52 65 6d 6f 76 65 20 61 6e *.- *.Remove an
b240: 79 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 72 y thread local r
b250: 65 66 73 20 74 6f 20 74 68 69 73 20 63 68 61 6e efs to this chan
b260: 6e 65 6c 2e 20 53 65 65 0a 2d 20 2a 09 54 63 6c nel. See.- *.Tcl
b270: 5f 43 75 74 43 68 61 6e 6e 65 6c 20 66 6f 72 20 _CutChannel for
b280: 6d 6f 72 65 20 69 6e 66 6f 2e 0a 2b 20 2a 09 49 more info..+ *.I
b290: 6e 73 65 72 74 20 6f 72 20 72 65 6d 6f 76 65 20 nsert or remove
b2a0: 61 6e 79 20 74 68 72 65 61 64 20 6c 6f 63 61 6c any thread local
b2b0: 20 72 65 66 73 20 74 6f 20 74 68 69 73 20 63 68 refs to this ch
b2c0: 61 6e 6e 65 6c 2e 0a 20 20 2a 0a 20 20 2a 20 52 annel.. *. * R
b2d0: 65 73 75 6c 74 73 3a 0a 20 20 2a 09 4e 6f 6e 65 esults:. *.None
b2e0: 2e 0a 40 40 20 2d 32 36 38 35 2c 33 31 20 2b 32 ..@@ -2685,31 +2
b2f0: 36 38 31 2c 34 31 20 40 40 0a 20 20 2a 2d 2d 2d 681,41 @@. *---
b300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b340: 2d 2d 2d 0a 20 20 2a 2f 0a 20 0a 2d 76 6f 69 64 ---. */. .-void
b350: 0a 2d 54 63 6c 70 43 75 74 53 6f 63 6b 43 68 61 .-TclpCutSockCha
b360: 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 20 20 20 nnel(chan).-
b370: 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e Tcl_Channel chan
b380: 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 61 6e 6e ;.../* The chann
b390: 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f 76 65 64 el being removed
b3a0: 2e 20 4d 75 73 74 0a 2d 20 20 20 20 20 20 20 20 . Must.-
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3d0: 20 2a 20 6e 6f 74 20 62 65 20 72 65 66 65 72 65 * not be refere
b3e0: 6e 63 65 64 20 69 6e 20 61 6e 79 0a 2d 20 20 20 nced in any.-
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b410: 20 20 20 20 20 20 2a 20 69 6e 74 65 72 70 72 65 * interpre
b420: 74 65 72 2e 20 2a 2f 0a 2b 73 74 61 74 69 63 20 ter. */.+static
b430: 76 6f 69 64 0a 2b 54 63 70 54 68 72 65 61 64 41 void.+TcpThreadA
b440: 63 74 69 6f 6e 50 72 6f 63 20 28 69 6e 73 74 61 ctionProc (insta
b450: 6e 63 65 44 61 74 61 2c 20 61 63 74 69 6f 6e 29 nceData, action)
b460: 0a 2b 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 .+ ClientDat
b470: 61 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a a instanceData;.
b480: 2b 20 20 20 20 20 69 6e 74 20 61 63 74 69 6f 6e + int action
b490: 3b 0a 20 7b 0a 20 20 20 20 20 54 68 72 65 61 64 ;. {. Thread
b4a0: 53 70 65 63 69 66 69 63 44 61 74 61 20 2a 74 73 SpecificData *ts
b4b0: 64 50 74 72 3b 0a 2d 20 20 20 20 53 6f 63 6b 65 dPtr;.- Socke
b4c0: 74 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 3b 0a tInfo *infoPtr;.
b4d0: 2d 20 20 20 20 53 6f 63 6b 65 74 49 6e 66 6f 20 - SocketInfo
b4e0: 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a 2d 20 **nextPtrPtr;.-
b4f0: 20 20 20 69 6e 74 20 72 65 6d 6f 76 65 64 20 3d int removed =
b500: 20 30 3b 0a 2d 0a 2d 20 20 20 20 69 66 20 28 54 0;.-.- if (T
b510: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 54 79 70 cl_GetChannelTyp
b520: 65 28 63 68 61 6e 29 20 21 3d 20 26 74 63 70 43 e(chan) != &tcpC
b530: 68 61 6e 6e 65 6c 54 79 70 65 29 20 7b 0a 2d 20 hannelType) {.-
b540: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 2d return;.-
b550: 20 20 20 20 7d 0a 2b 20 20 20 20 53 6f 63 6b 65 }.+ Socke
b560: 74 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 20 3d tInfo *infoPtr =
b570: 20 28 53 6f 63 6b 65 74 49 6e 66 6f 20 2a 29 20 (SocketInfo *)
b580: 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 2b 20 instanceData;.+
b590: 20 20 20 69 6e 74 20 20 20 20 20 20 6e 6f 74 69 int noti
b5a0: 66 79 43 6d 64 3b 0a 20 0a 2b 20 20 20 20 69 66 fyCmd;. .+ if
b5b0: 20 28 61 63 74 69 6f 6e 20 3d 3d 20 54 43 4c 5f (action == TCL_
b5c0: 43 48 41 4e 4e 45 4c 5f 54 48 52 45 41 44 5f 49 CHANNEL_THREAD_I
b5d0: 4e 53 45 52 54 29 20 7b 0a 20 20 20 20 20 2f 2a NSERT) {. /*
b5e0: 0a 2d 20 20 20 20 20 2a 20 54 68 65 20 69 6e 69 .- * The ini
b5f0: 74 69 61 6c 69 7a 74 69 6f 6e 20 6f 66 20 74 73 tializtion of ts
b600: 64 50 74 72 20 5f 61 66 74 65 72 5f 20 77 65 20 dPtr _after_ we
b610: 68 61 76 65 20 64 65 74 65 72 6d 69 6e 65 64 20 have determined
b620: 74 68 61 74 20 77 65 0a 2d 20 20 20 20 20 2a 20 that we.- *
b630: 61 72 65 20 64 65 61 6c 69 6e 67 20 77 69 74 68 are dealing with
b640: 20 73 6f 63 6b 65 74 20 69 73 20 6e 65 63 65 73 socket is neces
b650: 73 61 72 79 2e 20 44 6f 69 6e 67 20 69 74 20 62 sary. Doing it b
b660: 65 66 6f 72 65 20 63 61 75 73 65 73 0a 2d 20 20 efore causes.-
b670: 20 20 20 2a 20 74 68 65 20 6d 6f 64 75 6c 65 20 * the module
b680: 74 6f 20 61 63 63 65 73 73 20 74 68 20 74 64 73 to access th tds
b690: 50 74 72 20 77 68 65 6e 20 69 74 20 69 73 20 6e Ptr when it is n
b6a0: 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 79 ot initialized y
b6b0: 65 74 2c 0a 2d 20 20 20 20 20 2a 20 63 61 75 73 et,.- * caus
b6c0: 69 6e 67 20 61 20 6c 6f 63 6b 75 70 2e 0a 2b 09 ing a lockup..+.
b6d0: 20 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 73 * Ensure that s
b6e0: 6f 63 6b 65 74 20 73 75 62 73 79 73 74 65 6d 20 ocket subsystem
b6f0: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 is initialized i
b700: 6e 20 74 68 69 73 20 74 68 72 65 61 64 2c 20 6f n this thread, o
b710: 72 0a 2b 09 20 2a 20 65 6c 73 65 20 73 6f 63 6b r.+. * else sock
b720: 65 74 73 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72 ets will not wor
b730: 6b 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 2b 20 k.. */. .+
b740: 20 20 20 20 20 20 20 54 63 6c 5f 4d 75 74 65 78 Tcl_Mutex
b750: 4c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d 75 74 65 Lock(&socketMute
b760: 78 29 3b 0a 2b 09 49 6e 69 74 53 6f 63 6b 65 74 x);.+.InitSocket
b770: 73 28 29 3b 0a 2b 09 54 63 6c 5f 4d 75 74 65 78 s();.+.Tcl_Mutex
b780: 55 6e 6c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d 75 Unlock(&socketMu
b790: 74 65 78 29 3b 0a 2b 0a 20 20 20 20 20 74 73 64 tex);.+. tsd
b7a0: 50 74 72 20 20 3d 20 54 43 4c 5f 54 53 44 5f 49 Ptr = TCL_TSD_I
b7b0: 4e 49 54 28 26 64 61 74 61 4b 65 79 29 3b 0a 2d NIT(&dataKey);.-
b7c0: 20 20 20 20 69 6e 66 6f 50 74 72 20 3d 20 28 53 infoPtr = (S
b7d0: 6f 63 6b 65 74 49 6e 66 6f 20 2a 29 20 54 63 6c ocketInfo *) Tcl
b7e0: 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 _GetChannelInsta
b7f0: 6e 63 65 44 61 74 61 20 28 63 68 61 6e 29 3b 0a nceData (chan);.
b800: 20 0a 2b 09 57 61 69 74 46 6f 72 53 69 6e 67 6c .+.WaitForSingl
b810: 65 4f 62 6a 65 63 74 28 74 73 64 50 74 72 2d 3e eObject(tsdPtr->
b820: 73 6f 63 6b 65 74 4c 69 73 74 4c 6f 63 6b 2c 20 socketListLock,
b830: 49 4e 46 49 4e 49 54 45 29 3b 0a 2b 09 69 6e 66 INFINITE);.+.inf
b840: 6f 50 74 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 oPtr->nextPtr =
b850: 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 tsdPtr->socketLi
b860: 73 74 3b 0a 2b 09 74 73 64 50 74 72 2d 3e 73 6f st;.+.tsdPtr->so
b870: 63 6b 65 74 4c 69 73 74 20 3d 20 69 6e 66 6f 50 cketList = infoP
b880: 74 72 3b 0a 2b 09 53 65 74 45 76 65 6e 74 28 74 tr;.+.SetEvent(t
b890: 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 sdPtr->socketLis
b8a0: 74 4c 6f 63 6b 29 3b 0a 2b 0a 2b 09 6e 6f 74 69 tLock);.+.+.noti
b8b0: 66 79 43 6d 64 20 3d 20 53 45 4c 45 43 54 3b 0a fyCmd = SELECT;.
b8c0: 2b 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 + } else {.+
b8d0: 20 20 20 20 20 20 20 53 6f 63 6b 65 74 49 6e 66 SocketInf
b8e0: 6f 20 2a 2a 6e 65 78 74 50 74 72 50 74 72 3b 0a o **nextPtrPtr;.
b8f0: 2b 09 69 6e 74 20 72 65 6d 6f 76 65 64 20 3d 20 +.int removed =
b900: 30 3b 0a 2b 0a 2b 09 74 73 64 50 74 72 20 20 3d 0;.+.+.tsdPtr =
b910: 20 54 43 4c 5f 54 53 44 5f 49 4e 49 54 28 26 64 TCL_TSD_INIT(&d
b920: 61 74 61 4b 65 79 29 3b 0a 2b 0a 2b 09 2f 2a 20 ataKey);.+.+./*
b930: 54 49 50 20 23 32 31 38 2c 20 42 75 67 66 69 78 TIP #218, Bugfix
b940: 3a 20 41 6c 6c 20 61 63 63 65 73 73 20 74 6f 20 : All access to
b950: 73 6f 63 6b 65 74 4c 69 73 74 20 68 61 73 20 74 socketList has t
b960: 6f 20 62 65 20 70 72 6f 74 65 63 74 65 64 20 62 o be protected b
b970: 79 20 74 68 65 20 6c 6f 63 6b 20 2a 2f 0a 2b 09 y the lock */.+.
b980: 57 61 69 74 46 6f 72 53 69 6e 67 6c 65 4f 62 6a WaitForSingleObj
b990: 65 63 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b ect(tsdPtr->sock
b9a0: 65 74 4c 69 73 74 4c 6f 63 6b 2c 20 49 4e 46 49 etListLock, INFI
b9b0: 4e 49 54 45 29 3b 0a 20 20 20 20 20 66 6f 72 20 NITE);. for
b9c0: 28 6e 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 (nextPtrPtr = &(
b9d0: 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 tsdPtr->socketLi
b9e0: 73 74 29 3b 20 28 2a 6e 65 78 74 50 74 72 50 74 st); (*nextPtrPt
b9f0: 72 29 20 21 3d 20 4e 55 4c 4c 3b 0a 20 09 20 6e r) != NULL;. . n
ba00: 65 78 74 50 74 72 50 74 72 20 3d 20 26 28 28 2a extPtrPtr = &((*
ba10: 6e 65 78 74 50 74 72 50 74 72 29 2d 3e 6e 65 78 nextPtrPtr)->nex
ba20: 74 50 74 72 29 29 20 7b 0a 20 09 69 66 20 28 28 tPtr)) {. .if ((
ba30: 2a 6e 65 78 74 50 74 72 50 74 72 29 20 3d 3d 20 *nextPtrPtr) ==
ba40: 69 6e 66 6f 50 74 72 29 20 7b 0a 40 40 20 2d 32 infoPtr) {.@@ -2
ba50: 37 31 38 2c 36 20 2b 32 37 32 34 2c 37 20 40 40 718,6 +2724,7 @@
ba60: 0a 20 09 20 20 20 20 62 72 65 61 6b 3b 0a 20 09 . . break;. .
ba70: 7d 0a 20 20 20 20 20 7d 0a 2b 09 53 65 74 45 76 }. }.+.SetEv
ba80: 65 6e 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b ent(tsdPtr->sock
ba90: 65 74 4c 69 73 74 4c 6f 63 6b 29 3b 0a 20 0a 20 etListLock);. .
baa0: 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 54 /*. * T
bab0: 68 69 73 20 63 6f 75 6c 64 20 68 61 70 70 65 6e his could happen
bac0: 20 69 66 20 74 68 65 20 63 68 61 6e 6e 65 6c 20 if the channel
bad0: 77 61 73 20 63 72 65 61 74 65 64 20 69 6e 20 6f was created in o
bae0: 6e 65 20 74 68 72 65 61 64 0a 40 40 20 2d 32 37 ne thread.@@ -27
baf0: 32 39 2c 37 32 20 2b 32 37 33 36 2c 31 33 20 40 29,72 +2736,13 @
bb00: 40 0a 20 20 20 20 20 20 20 20 20 54 63 6c 5f 50 @. Tcl_P
bb10: 61 6e 69 63 28 22 66 69 6c 65 20 69 6e 66 6f 20 anic("file info
bb20: 70 74 72 20 6e 6f 74 20 6f 6e 20 74 68 72 65 61 ptr not on threa
bb30: 64 20 63 68 61 6e 6e 65 6c 20 6c 69 73 74 22 29 d channel list")
bb40: 3b 0a 20 20 20 20 20 7d 0a 20 0a 2d 20 20 20 20 ;. }. .-
bb50: 2f 2a 0a 2d 20 20 20 20 20 2a 20 53 74 6f 70 20 /*.- * Stop
bb60: 6e 6f 74 69 66 69 63 61 74 69 6f 6e 73 20 66 6f notifications fo
bb70: 72 20 74 68 65 20 73 6f 63 6b 65 74 20 74 6f 20 r the socket to
bb80: 6f 63 63 75 72 20 69 6e 20 74 68 69 73 20 74 68 occur in this th
bb90: 72 65 61 64 2e 0a 2d 20 20 20 20 20 2a 2f 0a 2d read..- */.-
bba0: 0a 2d 20 20 20 20 53 65 6e 64 4d 65 73 73 61 67 .- SendMessag
bbb0: 65 28 74 73 64 50 74 72 2d 3e 68 77 6e 64 2c 20 e(tsdPtr->hwnd,
bbc0: 53 4f 43 4b 45 54 5f 53 45 4c 45 43 54 2c 0a 2d SOCKET_SELECT,.-
bbd0: 09 09 28 57 50 41 52 41 4d 29 20 55 4e 53 45 4c ..(WPARAM) UNSEL
bbe0: 45 43 54 2c 20 28 4c 50 41 52 41 4d 29 20 69 6e ECT, (LPARAM) in
bbf0: 66 6f 50 74 72 29 3b 0a 2d 7d 0a 2d 0c 0a 2d 2f foPtr);.-}.-..-/
bc00: 2a 0a 2d 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *.- *-----------
bc10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bc20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bc30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bc40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2d 20 2a 0a -----------.- *.
bc50: 2d 20 2a 20 54 63 6c 70 53 70 6c 69 63 65 53 6f - * TclpSpliceSo
bc60: 63 6b 43 68 61 6e 6e 65 6c 20 2d 2d 0a 2d 20 2a ckChannel --.- *
bc70: 0a 2d 20 2a 09 49 6e 73 65 72 74 20 74 68 72 65 .- *.Insert thre
bc80: 61 64 20 6c 6f 63 61 6c 20 72 65 66 20 66 6f 72 ad local ref for
bc90: 20 74 68 69 73 20 63 68 61 6e 6e 65 6c 2e 0a 2d this channel..-
bca0: 20 2a 09 54 63 6c 5f 53 70 6c 69 63 65 43 68 61 *.Tcl_SpliceCha
bcb0: 6e 6e 65 6c 20 66 6f 72 20 6d 6f 72 65 20 69 6e nnel for more in
bcc0: 66 6f 2e 0a 2d 20 2a 0a 2d 20 2a 20 52 65 73 75 fo..- *.- * Resu
bcd0: 6c 74 73 3a 0a 2d 20 2a 09 4e 6f 6e 65 2e 0a 2d lts:.- *.None..-
bce0: 20 2a 0a 2d 20 2a 20 53 69 64 65 20 65 66 66 65 *.- * Side effe
bcf0: 63 74 73 3a 0a 2d 20 2a 09 43 68 61 6e 67 65 73 cts:.- *.Changes
bd00: 20 74 68 72 65 61 64 20 6c 6f 63 61 6c 20 6c 69 thread local li
bd10: 73 74 20 6f 66 20 76 61 6c 69 64 20 63 68 61 6e st of valid chan
bd20: 6e 65 6c 73 2e 0a 2d 20 2a 0a 2d 20 2a 2d 2d 2d nels..- *.- *---
bd30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bd40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bd50: 2d 2d 2d 2d 2d 2d 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 0a 2d 20 2a 2f 0a 2d 0a 2d 76 6f 69 64 ---.- */.-.-void
bd80: 0a 2d 54 63 6c 70 53 70 6c 69 63 65 53 6f 63 6b .-TclpSpliceSock
bd90: 43 68 61 6e 6e 65 6c 28 63 68 61 6e 29 0a 2d 20 Channel(chan).-
bda0: 20 20 20 54 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 Tcl_Channel c
bdb0: 68 61 6e 3b 09 09 09 2f 2a 20 54 68 65 20 63 68 han;.../* The ch
bdc0: 61 6e 6e 65 6c 20 62 65 69 6e 67 20 72 65 6d 6f annel being remo
bdd0: 76 65 64 2e 20 4d 75 73 74 0a 2d 20 20 20 20 20 ved. Must.-
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be00: 20 20 20 20 2a 20 6e 6f 74 20 62 65 20 72 65 66 * not be ref
be10: 65 72 65 6e 63 65 64 20 69 6e 20 61 6e 79 0a 2d erenced in any.-
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be40: 20 20 20 20 20 20 20 20 20 2a 20 69 6e 74 65 72 * inter
be50: 70 72 65 74 65 72 2e 20 2a 2f 0a 2d 7b 0a 2d 20 preter. */.-{.-
be60: 20 20 20 54 68 72 65 61 64 53 70 65 63 69 66 69 ThreadSpecifi
be70: 63 44 61 74 61 20 2a 74 73 64 50 74 72 3b 0a 2d cData *tsdPtr;.-
be80: 20 20 20 20 53 6f 63 6b 65 74 49 6e 66 6f 20 2a SocketInfo *
be90: 69 6e 66 6f 50 74 72 3b 0a 2d 0a 2d 20 20 20 20 infoPtr;.-.-
bea0: 69 66 20 28 54 63 6c 5f 47 65 74 43 68 61 6e 6e if (Tcl_GetChann
beb0: 65 6c 54 79 70 65 28 63 68 61 6e 29 20 21 3d 20 elType(chan) !=
bec0: 26 74 63 70 43 68 61 6e 6e 65 6c 54 79 70 65 29 &tcpChannelType)
bed0: 20 7b 0a 2d 20 20 20 20 20 20 20 20 72 65 74 75 {.- retu
bee0: 72 6e 3b 0a 2b 09 6e 6f 74 69 66 79 43 6d 64 20 rn;.+.notifyCmd
bef0: 3d 20 55 4e 53 45 4c 45 43 54 3b 0a 20 20 20 20 = UNSELECT;.
bf00: 20 7d 0a 20 0a 20 20 20 20 20 2f 2a 0a 2d 20 20 }. . /*.-
bf10: 20 20 20 2a 20 45 6e 73 75 72 65 20 74 68 61 74 * Ensure that
bf20: 20 73 6f 63 6b 65 74 20 73 75 62 73 79 73 74 65 socket subsyste
bf30: 6d 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 m is initialized
bf40: 20 69 6e 20 74 68 69 73 20 74 68 72 65 61 64 2c in this thread,
bf50: 20 6f 72 0a 2d 20 20 20 20 20 2a 20 65 6c 73 65 or.- * else
bf60: 20 73 6f 63 6b 65 74 73 20 77 69 6c 6c 20 6e 6f sockets will no
bf70: 74 20 77 6f 72 6b 2e 0a 2d 20 20 20 20 20 2a 2f t work..- */
bf80: 0a 2d 0a 2d 20 20 20 20 54 63 6c 5f 4d 75 74 65 .-.- Tcl_Mute
bf90: 78 4c 6f 63 6b 28 26 73 6f 63 6b 65 74 4d 75 74 xLock(&socketMut
bfa0: 65 78 29 3b 0a 2d 20 20 20 20 49 6e 69 74 53 6f ex);.- InitSo
bfb0: 63 6b 65 74 73 28 29 3b 0a 2d 20 20 20 20 54 63 ckets();.- Tc
bfc0: 6c 5f 4d 75 74 65 78 55 6e 6c 6f 63 6b 28 26 73 l_MutexUnlock(&s
bfd0: 6f 63 6b 65 74 4d 75 74 65 78 29 3b 0a 2d 0a 2d ocketMutex);.-.-
bfe0: 20 20 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 54 /*.- * T
bff0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 74 69 6f 6e he initializtion
c000: 20 6f 66 20 74 73 64 50 74 72 20 5f 61 66 74 65 of tsdPtr _afte
c010: 72 5f 20 77 65 20 68 61 76 65 20 64 65 74 65 72 r_ we have deter
c020: 6d 69 6e 65 64 20 74 68 61 74 20 77 65 0a 2d 20 mined that we.-
c030: 20 20 20 20 2a 20 61 72 65 20 64 65 61 6c 69 6e * are dealin
c040: 67 20 77 69 74 68 20 73 6f 63 6b 65 74 20 69 73 g with socket is
c050: 20 6e 65 63 65 73 73 61 72 79 2e 20 44 6f 69 6e necessary. Doin
c060: 67 20 69 74 20 62 65 66 6f 72 65 20 63 61 75 73 g it before caus
c070: 65 73 0a 2d 20 20 20 20 20 2a 20 74 68 65 20 6d es.- * the m
c080: 6f 64 75 6c 65 20 74 6f 20 61 63 63 65 73 73 20 odule to access
c090: 74 68 20 74 64 73 50 74 72 20 77 68 65 6e 20 69 th tdsPtr when i
c0a0: 74 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c t is not initial
c0b0: 69 7a 65 64 20 79 65 74 2c 0a 2d 20 20 20 20 20 ized yet,.-
c0c0: 2a 20 63 61 75 73 69 6e 67 20 61 20 6c 6f 63 6b * causing a lock
c0d0: 75 70 2e 0a 2d 20 20 20 20 20 2a 2f 0a 2d 0a 2d up..- */.-.-
c0e0: 20 20 20 20 74 73 64 50 74 72 20 20 3d 20 54 43 tsdPtr = TC
c0f0: 4c 5f 54 53 44 5f 49 4e 49 54 28 26 64 61 74 61 L_TSD_INIT(&data
c100: 4b 65 79 29 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 Key);.- infoP
c110: 74 72 20 3d 20 28 53 6f 63 6b 65 74 49 6e 66 6f tr = (SocketInfo
c120: 20 2a 29 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e *) Tcl_GetChann
c130: 65 6c 49 6e 73 74 61 6e 63 65 44 61 74 61 20 28 elInstanceData (
c140: 63 68 61 6e 29 3b 0a 2d 0a 2d 20 20 20 20 57 61 chan);.-.- Wa
c150: 69 74 46 6f 72 53 69 6e 67 6c 65 4f 62 6a 65 63 itForSingleObjec
c160: 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 t(tsdPtr->socket
c170: 4c 69 73 74 4c 6f 63 6b 2c 20 49 4e 46 49 4e 49 ListLock, INFINI
c180: 54 45 29 3b 0a 2d 20 20 20 20 69 6e 66 6f 50 74 TE);.- infoPt
c190: 72 2d 3e 6e 65 78 74 50 74 72 20 3d 20 74 73 64 r->nextPtr = tsd
c1a0: 50 74 72 2d 3e 73 6f 63 6b 65 74 4c 69 73 74 3b Ptr->socketList;
c1b0: 0a 2d 20 20 20 20 74 73 64 50 74 72 2d 3e 73 6f .- tsdPtr->so
c1c0: 63 6b 65 74 4c 69 73 74 20 3d 20 69 6e 66 6f 50 cketList = infoP
c1d0: 74 72 3b 0a 2d 20 20 20 20 53 65 74 45 76 65 6e tr;.- SetEven
c1e0: 74 28 74 73 64 50 74 72 2d 3e 73 6f 63 6b 65 74 t(tsdPtr->socket
c1f0: 4c 69 73 74 4c 6f 63 6b 29 3b 0a 2d 0a 2d 20 20 ListLock);.-.-
c200: 20 20 2f 2a 0a 2d 20 20 20 20 20 2a 20 45 6e 73 /*.- * Ens
c210: 75 72 65 20 74 68 61 74 20 6e 6f 74 69 66 69 63 ure that notific
c220: 61 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 73 ations for the s
c230: 6f 63 6b 65 74 20 6f 63 63 75 72 20 69 6e 20 74 ocket occur in t
c240: 68 69 73 20 74 68 72 65 61 64 2e 0a 2b 20 20 20 his thread..+
c250: 20 20 2a 20 45 6e 73 75 72 65 20 74 68 61 74 2c * Ensure that,
c260: 20 6f 72 20 73 74 6f 70 2c 20 6e 6f 74 69 66 69 or stop, notifi
c270: 63 61 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 cations for the
c280: 73 6f 63 6b 65 74 20 6f 63 63 75 72 20 69 6e 20 socket occur in
c290: 74 68 69 73 20 74 68 72 65 61 64 2e 0a 20 20 20 this thread..
c2a0: 20 20 20 2a 2f 0a 20 0a 20 20 20 20 20 53 65 6e */. . Sen
c2b0: 64 4d 65 73 73 61 67 65 28 74 73 64 50 74 72 2d dMessage(tsdPtr-
c2c0: 3e 68 77 6e 64 2c 20 53 4f 43 4b 45 54 5f 53 45 >hwnd, SOCKET_SE
c2d0: 4c 45 43 54 2c 0a 2d 09 09 28 57 50 41 52 41 4d LECT,.-..(WPARAM
c2e0: 29 20 53 45 4c 45 43 54 2c 20 28 4c 50 41 52 41 ) SELECT, (LPARA
c2f0: 4d 29 20 69 6e 66 6f 50 74 72 29 3b 0a 2b 09 09 M) infoPtr);.+..
c300: 28 57 50 41 52 41 4d 29 20 6e 6f 74 69 66 79 43 (WPARAM) notifyC
c310: 6d 64 2c 20 28 4c 50 41 52 41 4d 29 20 69 6e 66 md, (LPARAM) inf
c320: 6f 50 74 72 29 3b 0a 20 7d 0a oPtr);. }.