Merge lp:~jontai/openvista-gtm-integration/bug683878 into lp:openvista-gtm-integration
- bug683878
- Merge into mainline
Proposed by
Jon Tai
Status: | Merged |
---|---|
Merged at revision: | 144 |
Proposed branch: | lp:~jontai/openvista-gtm-integration/bug683878 |
Merge into: | lp:openvista-gtm-integration |
Diff against target: |
711 lines (+625/-18) 6 files modified
kids/XU_80_1508.KID (+496/-0) mumps/XU1508E.m (+18/-0) mumps/ZISTCPS.m (+7/-4) src/libopenvista/GTMSRV.m (+6/-2) src/libopenvista/gtmserver.c (+97/-12) src/libopenvista/openvista.xc.in (+1/-0) |
To merge this branch: | bzr merge lp:~jontai/openvista-gtm-integration/bug683878 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
jeff.apple | Approve | ||
Review via email: mp+42721@code.launchpad.net |
Commit message
Description of the change
This is the packaging work around lp:~jeff-apple/openvista-gtm-integration/listener. This merge would supersede that merge.
Unfortunately, to make sure the MUMPS code and the C code get upgraded together, the fix itself had to be altered substantially, so I'm putting it up for review again.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file 'kids/XU_80_1508.KID' | |||
2 | --- kids/XU_80_1508.KID 1970-01-01 00:00:00 +0000 | |||
3 | +++ kids/XU_80_1508.KID 2010-12-04 06:46:54 +0000 | |||
4 | @@ -0,0 +1,496 @@ | |||
5 | 1 | KIDS Distribution saved on Dec 03, 2010@21:05:29 | ||
6 | 2 | artf10843, run ZTMGRSET after installing | ||
7 | 3 | **KIDS**:XU*8.0*1508^ | ||
8 | 4 | |||
9 | 5 | **INSTALL NAME** | ||
10 | 6 | XU*8.0*1508 | ||
11 | 7 | "BLD",7335,0) | ||
12 | 8 | XU*8.0*1508^KERNEL^0^3101203^n | ||
13 | 9 | "BLD",7335,4,0) | ||
14 | 10 | ^9.64PA^^ | ||
15 | 11 | "BLD",7335,6.3) | ||
16 | 12 | 1 | ||
17 | 13 | "BLD",7335,"ABPKG") | ||
18 | 14 | n | ||
19 | 15 | "BLD",7335,"INID") | ||
20 | 16 | y | ||
21 | 17 | "BLD",7335,"KRN",0) | ||
22 | 18 | ^9.67PA^8989.52^19 | ||
23 | 19 | "BLD",7335,"KRN",.4,0) | ||
24 | 20 | .4 | ||
25 | 21 | "BLD",7335,"KRN",.401,0) | ||
26 | 22 | .401 | ||
27 | 23 | "BLD",7335,"KRN",.402,0) | ||
28 | 24 | .402 | ||
29 | 25 | "BLD",7335,"KRN",.403,0) | ||
30 | 26 | .403 | ||
31 | 27 | "BLD",7335,"KRN",.5,0) | ||
32 | 28 | .5 | ||
33 | 29 | "BLD",7335,"KRN",.84,0) | ||
34 | 30 | .84 | ||
35 | 31 | "BLD",7335,"KRN",3.6,0) | ||
36 | 32 | 3.6 | ||
37 | 33 | "BLD",7335,"KRN",3.8,0) | ||
38 | 34 | 3.8 | ||
39 | 35 | "BLD",7335,"KRN",9.2,0) | ||
40 | 36 | 9.2 | ||
41 | 37 | "BLD",7335,"KRN",9.8,0) | ||
42 | 38 | 9.8 | ||
43 | 39 | "BLD",7335,"KRN",9.8,"NM",0) | ||
44 | 40 | ^9.68A^1^1 | ||
45 | 41 | "BLD",7335,"KRN",9.8,"NM",1,0) | ||
46 | 42 | ZISTCPS^^0^B20023114 | ||
47 | 43 | "BLD",7335,"KRN",9.8,"NM","B","ZISTCPS",1) | ||
48 | 44 | |||
49 | 45 | "BLD",7335,"KRN",19,0) | ||
50 | 46 | 19 | ||
51 | 47 | "BLD",7335,"KRN",19.1,0) | ||
52 | 48 | 19.1 | ||
53 | 49 | "BLD",7335,"KRN",101,0) | ||
54 | 50 | 101 | ||
55 | 51 | "BLD",7335,"KRN",409.61,0) | ||
56 | 52 | 409.61 | ||
57 | 53 | "BLD",7335,"KRN",771,0) | ||
58 | 54 | 771 | ||
59 | 55 | "BLD",7335,"KRN",870,0) | ||
60 | 56 | 870 | ||
61 | 57 | "BLD",7335,"KRN",8989.51,0) | ||
62 | 58 | 8989.51 | ||
63 | 59 | "BLD",7335,"KRN",8989.52,0) | ||
64 | 60 | 8989.52 | ||
65 | 61 | "BLD",7335,"KRN",8994,0) | ||
66 | 62 | 8994 | ||
67 | 63 | "BLD",7335,"KRN","B",.4,.4) | ||
68 | 64 | |||
69 | 65 | "BLD",7335,"KRN","B",.401,.401) | ||
70 | 66 | |||
71 | 67 | "BLD",7335,"KRN","B",.402,.402) | ||
72 | 68 | |||
73 | 69 | "BLD",7335,"KRN","B",.403,.403) | ||
74 | 70 | |||
75 | 71 | "BLD",7335,"KRN","B",.5,.5) | ||
76 | 72 | |||
77 | 73 | "BLD",7335,"KRN","B",.84,.84) | ||
78 | 74 | |||
79 | 75 | "BLD",7335,"KRN","B",3.6,3.6) | ||
80 | 76 | |||
81 | 77 | "BLD",7335,"KRN","B",3.8,3.8) | ||
82 | 78 | |||
83 | 79 | "BLD",7335,"KRN","B",9.2,9.2) | ||
84 | 80 | |||
85 | 81 | "BLD",7335,"KRN","B",9.8,9.8) | ||
86 | 82 | |||
87 | 83 | "BLD",7335,"KRN","B",19,19) | ||
88 | 84 | |||
89 | 85 | "BLD",7335,"KRN","B",19.1,19.1) | ||
90 | 86 | |||
91 | 87 | "BLD",7335,"KRN","B",101,101) | ||
92 | 88 | |||
93 | 89 | "BLD",7335,"KRN","B",409.61,409.61) | ||
94 | 90 | |||
95 | 91 | "BLD",7335,"KRN","B",771,771) | ||
96 | 92 | |||
97 | 93 | "BLD",7335,"KRN","B",870,870) | ||
98 | 94 | |||
99 | 95 | "BLD",7335,"KRN","B",8989.51,8989.51) | ||
100 | 96 | |||
101 | 97 | "BLD",7335,"KRN","B",8989.52,8989.52) | ||
102 | 98 | |||
103 | 99 | "BLD",7335,"KRN","B",8994,8994) | ||
104 | 100 | |||
105 | 101 | "BLD",7335,"MSC") | ||
106 | 102 | /home/jon/XU_80_1508.KID | ||
107 | 103 | "BLD",7335,"MSCOM") | ||
108 | 104 | artf10843, run ZTMGRSET after installing | ||
109 | 105 | "BLD",7335,"PRE") | ||
110 | 106 | XU1508E | ||
111 | 107 | "BLD",7335,"QUES",0) | ||
112 | 108 | ^9.62^^ | ||
113 | 109 | "BLD",7335,"REQB",0) | ||
114 | 110 | ^9.611^^ | ||
115 | 111 | "MBREQ") | ||
116 | 112 | 0 | ||
117 | 113 | "PKG",3,-1) | ||
118 | 114 | 1^1 | ||
119 | 115 | "PKG",3,0) | ||
120 | 116 | KERNEL^XU^SIGN-ON, SECURITY, MENU DRIVER, DEVICES, TASKMAN^ | ||
121 | 117 | "PKG",3,20,0) | ||
122 | 118 | ^9.402P^^ | ||
123 | 119 | "PKG",3,22,0) | ||
124 | 120 | ^9.49I^1^1 | ||
125 | 121 | "PKG",3,22,1,0) | ||
126 | 122 | 8.0^3040115^2960606^1 | ||
127 | 123 | "PKG",3,22,1,"PAH",1,0) | ||
128 | 124 | 1508^3101203 | ||
129 | 125 | "PRE") | ||
130 | 126 | XU1508E | ||
131 | 127 | "QUES","XPF1",0) | ||
132 | 128 | Y | ||
133 | 129 | "QUES","XPF1","??") | ||
134 | 130 | ^D REP^XPDH | ||
135 | 131 | "QUES","XPF1","A") | ||
136 | 132 | Shall I write over your |FLAG| File | ||
137 | 133 | "QUES","XPF1","B") | ||
138 | 134 | YES | ||
139 | 135 | "QUES","XPF1","M") | ||
140 | 136 | D XPF1^XPDIQ | ||
141 | 137 | "QUES","XPF2",0) | ||
142 | 138 | Y | ||
143 | 139 | "QUES","XPF2","??") | ||
144 | 140 | ^D DTA^XPDH | ||
145 | 141 | "QUES","XPF2","A") | ||
146 | 142 | Want my data |FLAG| yours | ||
147 | 143 | "QUES","XPF2","B") | ||
148 | 144 | YES | ||
149 | 145 | "QUES","XPF2","M") | ||
150 | 146 | D XPF2^XPDIQ | ||
151 | 147 | "QUES","XPI1",0) | ||
152 | 148 | YO | ||
153 | 149 | "QUES","XPI1","??") | ||
154 | 150 | ^D INHIBIT^XPDH | ||
155 | 151 | "QUES","XPI1","A") | ||
156 | 152 | Want KIDS to INHIBIT LOGONs during the install | ||
157 | 153 | "QUES","XPI1","B") | ||
158 | 154 | NO | ||
159 | 155 | "QUES","XPI1","M") | ||
160 | 156 | D XPI1^XPDIQ | ||
161 | 157 | "QUES","XPM1",0) | ||
162 | 158 | PO^VA(200,:EM | ||
163 | 159 | "QUES","XPM1","??") | ||
164 | 160 | ^D MG^XPDH | ||
165 | 161 | "QUES","XPM1","A") | ||
166 | 162 | Enter the Coordinator for Mail Group '|FLAG|' | ||
167 | 163 | "QUES","XPM1","B") | ||
168 | 164 | |||
169 | 165 | "QUES","XPM1","M") | ||
170 | 166 | D XPM1^XPDIQ | ||
171 | 167 | "QUES","XPO1",0) | ||
172 | 168 | Y | ||
173 | 169 | "QUES","XPO1","??") | ||
174 | 170 | ^D MENU^XPDH | ||
175 | 171 | "QUES","XPO1","A") | ||
176 | 172 | Want KIDS to Rebuild Menu Trees Upon Completion of Install | ||
177 | 173 | "QUES","XPO1","B") | ||
178 | 174 | NO | ||
179 | 175 | "QUES","XPO1","M") | ||
180 | 176 | D XPO1^XPDIQ | ||
181 | 177 | "QUES","XPZ1",0) | ||
182 | 178 | Y | ||
183 | 179 | "QUES","XPZ1","??") | ||
184 | 180 | ^D OPT^XPDH | ||
185 | 181 | "QUES","XPZ1","A") | ||
186 | 182 | Want to DISABLE Scheduled Options, Menu Options, and Protocols | ||
187 | 183 | "QUES","XPZ1","B") | ||
188 | 184 | NO | ||
189 | 185 | "QUES","XPZ1","M") | ||
190 | 186 | D XPZ1^XPDIQ | ||
191 | 187 | "QUES","XPZ2",0) | ||
192 | 188 | Y | ||
193 | 189 | "QUES","XPZ2","??") | ||
194 | 190 | ^D RTN^XPDH | ||
195 | 191 | "QUES","XPZ2","A") | ||
196 | 192 | Want to MOVE routines to other CPUs | ||
197 | 193 | "QUES","XPZ2","B") | ||
198 | 194 | NO | ||
199 | 195 | "QUES","XPZ2","M") | ||
200 | 196 | D XPZ2^XPDIQ | ||
201 | 197 | "RTN") | ||
202 | 198 | 2 | ||
203 | 199 | "RTN","XU1508E") | ||
204 | 200 | 0^^B2244259 | ||
205 | 201 | "RTN","XU1508E",1,0) | ||
206 | 202 | XU1508E ;MSC/JKT - Environment check routine for XU*8.0*1508 ;3DEC2010 20:18 | ||
207 | 203 | "RTN","XU1508E",2,0) | ||
208 | 204 | ;;8.0;KERNEL;**1508**;DEC 3, 2010; | ||
209 | 205 | "RTN","XU1508E",3,0) | ||
210 | 206 | ; | ||
211 | 207 | "RTN","XU1508E",4,0) | ||
212 | 208 | ; check for presence of $&openvista.gtmserver2 call | ||
213 | 209 | "RTN","XU1508E",5,0) | ||
214 | 210 | ; | ||
215 | 211 | "RTN","XU1508E",6,0) | ||
216 | 212 | Q:$G(^%ZOSF("OS"))'["GT.M" | ||
217 | 213 | "RTN","XU1508E",7,0) | ||
218 | 214 | ; | ||
219 | 215 | "RTN","XU1508E",8,0) | ||
220 | 216 | N XC,%I,LINE,FOUND,VERSION | ||
221 | 217 | "RTN","XU1508E",9,0) | ||
222 | 218 | S XC=$$GTMPATH^ZCD($$CURRENT^ZCD())_"/openvista.xc" | ||
223 | 219 | "RTN","XU1508E",10,0) | ||
224 | 220 | S %I=$I O XC:(READONLY) U XC | ||
225 | 221 | "RTN","XU1508E",11,0) | ||
226 | 222 | S FOUND=0 F R LINE Q:LINE="" S:$P(LINE,":",1)="gtmserver2" FOUND=1 | ||
227 | 223 | "RTN","XU1508E",12,0) | ||
228 | 224 | C XC U %I | ||
229 | 225 | "RTN","XU1508E",13,0) | ||
230 | 226 | I 'FOUND D | ||
231 | 227 | "RTN","XU1508E",14,0) | ||
232 | 228 | . S VERSION=$TR($E($P($ZV," ",2),2,999),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") | ||
233 | 229 | "RTN","XU1508E",15,0) | ||
234 | 230 | . S VERSION=$P(VERSION,"-")_$P(VERSION,"-",2) | ||
235 | 231 | "RTN","XU1508E",16,0) | ||
236 | 232 | . D BMES^XPDUTL("** You must install version 0.8.11 or later of the openvista-libs-"_VERSION_" Linux package before installing this build **") | ||
237 | 233 | "RTN","XU1508E",17,0) | ||
238 | 234 | . S XPDABORT=1 | ||
239 | 235 | "RTN","XU1508E",18,0) | ||
240 | 236 | Q | ||
241 | 237 | "RTN","ZISTCPS") | ||
242 | 238 | 0^1^B20023114 | ||
243 | 239 | "RTN","ZISTCPS",1,0) | ||
244 | 240 | %ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;03DEC2010 | ||
245 | 241 | "RTN","ZISTCPS",2,0) | ||
246 | 242 | ;;8.0;KERNEL;**78,118,127,225,275,388,1508**;Jul 10, 1995 | ||
247 | 243 | "RTN","ZISTCPS",3,0) | ||
248 | 244 | Q | ||
249 | 245 | "RTN","ZISTCPS",4,0) | ||
250 | 246 | ; | ||
251 | 247 | "RTN","ZISTCPS",5,0) | ||
252 | 248 | CLOSE ;Close and reset | ||
253 | 249 | "RTN","ZISTCPS",6,0) | ||
254 | 250 | G CLOSE^%ZISTCP | ||
255 | 251 | "RTN","ZISTCPS",7,0) | ||
256 | 252 | Q | ||
257 | 253 | "RTN","ZISTCPS",8,0) | ||
258 | 254 | ; | ||
259 | 255 | "RTN","ZISTCPS",9,0) | ||
260 | 256 | ;In ZRULE, set ZISQUIT=1 to quit | ||
261 | 257 | "RTN","ZISTCPS",10,0) | ||
262 | 258 | LISTEN(SOCK,RTN,ZRULE) ;Listen on socket, start routine | ||
263 | 259 | "RTN","ZISTCPS",11,0) | ||
264 | 260 | N %A,ZISOS,X,NIO,EXIT | ||
265 | 261 | "RTN","ZISTCPS",12,0) | ||
266 | 262 | N $ES,$ET S $ETRAP="D OPNERR^%ZISTCPS" | ||
267 | 263 | "RTN","ZISTCPS",13,0) | ||
268 | 264 | S ZISOS=^%ZOSF("OS"),ZRULE=$G(ZRULE) | ||
269 | 265 | "RTN","ZISTCPS",14,0) | ||
270 | 266 | S POP=1 | ||
271 | 267 | "RTN","ZISTCPS",15,0) | ||
272 | 268 | D GETENV^%ZOSV S U="^",XUENV=Y,XQVOL=$P(Y,U,2) | ||
273 | 269 | "RTN","ZISTCPS",16,0) | ||
274 | 270 | S POP=1 D LONT:ZISOS["OpenM",LGTM:ZISOS["GT.M" | ||
275 | 271 | "RTN","ZISTCPS",17,0) | ||
276 | 272 | I 'POP C NIO ;Close port | ||
277 | 273 | "RTN","ZISTCPS",18,0) | ||
278 | 274 | Q | ||
279 | 275 | "RTN","ZISTCPS",19,0) | ||
280 | 276 | ; | ||
281 | 277 | "RTN","ZISTCPS",20,0) | ||
282 | 278 | ; | ||
283 | 279 | "RTN","ZISTCPS",21,0) | ||
284 | 280 | LONT ;Open port in Accept mode with standard terminators. | ||
285 | 281 | "RTN","ZISTCPS",22,0) | ||
286 | 282 | N %ZA,NEWCHAR | ||
287 | 283 | "RTN","ZISTCPS",23,0) | ||
288 | 284 | S NIO="|TCP|"_SOCK,EXIT=0 | ||
289 | 285 | "RTN","ZISTCPS",24,0) | ||
290 | 286 | ;(adr:sock:term:ibuf:obuf:queue) | ||
291 | 287 | "RTN","ZISTCPS",25,0) | ||
292 | 288 | O NIO:(:SOCK:"AT"::512:512:10):30 Q:'$T S POP=0 U NIO | ||
293 | 289 | "RTN","ZISTCPS",26,0) | ||
294 | 290 | ;Wait on read for a connect | ||
295 | 291 | "RTN","ZISTCPS",27,0) | ||
296 | 292 | LONT2 F U NIO R *NEWCHAR:30 S EXIT=$$EXIT Q:$T!EXIT | ||
297 | 293 | "RTN","ZISTCPS",28,0) | ||
298 | 294 | I EXIT C NIO Q | ||
299 | 295 | "RTN","ZISTCPS",29,0) | ||
300 | 296 | ;JOB params (:Concurrent Server bit:principal input:principal output) | ||
301 | 297 | "RTN","ZISTCPS",30,0) | ||
302 | 298 | J CHILDONT^%ZISTCPS(NIO,RTN):(:16::):10 S %ZA=$ZA | ||
303 | 299 | "RTN","ZISTCPS",31,0) | ||
304 | 300 | I %ZA\8196#2=1 W *-2 ;Job failed to clear bit | ||
305 | 301 | "RTN","ZISTCPS",32,0) | ||
306 | 302 | G LONT2 | ||
307 | 303 | "RTN","ZISTCPS",33,0) | ||
308 | 304 | ; | ||
309 | 305 | "RTN","ZISTCPS",34,0) | ||
310 | 306 | CHILDONT(IO,RTN) ;Child process for OpenM | ||
311 | 307 | "RTN","ZISTCPS",35,0) | ||
312 | 308 | S $ETRAP="D ^%ZTER L HALT",IO=$ZU(53) | ||
313 | 309 | "RTN","ZISTCPS",36,0) | ||
314 | 310 | U IO:(::"-M") ;Work like DSM | ||
315 | 311 | "RTN","ZISTCPS",37,0) | ||
316 | 312 | S NEWJOB=$$NEWOK | ||
317 | 313 | "RTN","ZISTCPS",38,0) | ||
318 | 314 | I 'NEWJOB W "421 Service temporarily down.",$C(13,10),! | ||
319 | 315 | "RTN","ZISTCPS",39,0) | ||
320 | 316 | I NEWJOB K NEWJOB D VAR,@RTN | ||
321 | 317 | "RTN","ZISTCPS",40,0) | ||
322 | 318 | HALT | ||
323 | 319 | "RTN","ZISTCPS",41,0) | ||
324 | 320 | ; | ||
325 | 321 | "RTN","ZISTCPS",42,0) | ||
326 | 322 | VAR ;Setup IO variables | ||
327 | 323 | "RTN","ZISTCPS",43,0) | ||
328 | 324 | S IO(0)=IO,IO(1,IO)="",POP=0 | ||
329 | 325 | "RTN","ZISTCPS",44,0) | ||
330 | 326 | S IOT="TCP",IOST="P-TCP",IOST(0)=0 | ||
331 | 327 | "RTN","ZISTCPS",45,0) | ||
332 | 328 | S IOF=$$FLUSHCHR^%ZISTCP | ||
333 | 329 | "RTN","ZISTCPS",46,0) | ||
334 | 330 | S ^XUTL("XQ",$J,0)=$$DT^XLFDT | ||
335 | 331 | "RTN","ZISTCPS",47,0) | ||
336 | 332 | Q | ||
337 | 333 | "RTN","ZISTCPS",48,0) | ||
338 | 334 | NEWOK() ;Is it OK to start a new process | ||
339 | 335 | "RTN","ZISTCPS",49,0) | ||
340 | 336 | I $G(^%ZIS(14.5,"LOGON",^%ZOSF("VOL"))) Q 0 | ||
341 | 337 | "RTN","ZISTCPS",50,0) | ||
342 | 338 | I $$AVJ^%ZOSV()<3 Q 0 | ||
343 | 339 | "RTN","ZISTCPS",51,0) | ||
344 | 340 | Q 1 | ||
345 | 341 | "RTN","ZISTCPS",52,0) | ||
346 | 342 | OPNERR ; | ||
347 | 343 | "RTN","ZISTCPS",53,0) | ||
348 | 344 | S POP=1,EXIT=1,IO("ERROR")=$ECODE,$ECODE="" | ||
349 | 345 | "RTN","ZISTCPS",54,0) | ||
350 | 346 | Q | ||
351 | 347 | "RTN","ZISTCPS",55,0) | ||
352 | 348 | EXIT() ;See if time to exit | ||
353 | 349 | "RTN","ZISTCPS",56,0) | ||
354 | 350 | I $$S^%ZTLOAD Q 1 | ||
355 | 351 | "RTN","ZISTCPS",57,0) | ||
356 | 352 | N ZISQUIT S ZISQUIT=0 | ||
357 | 353 | "RTN","ZISTCPS",58,0) | ||
358 | 354 | I $L(ZRULE) X ZRULE I $G(ZISQUIT) Q 1 | ||
359 | 355 | "RTN","ZISTCPS",59,0) | ||
360 | 356 | Q 0 | ||
361 | 357 | "RTN","ZISTCPS",60,0) | ||
362 | 358 | ; | ||
363 | 359 | "RTN","ZISTCPS",61,0) | ||
364 | 360 | LGTM ;GT.M multi thread server | ||
365 | 361 | "RTN","ZISTCPS",62,0) | ||
366 | 362 | N %A K ^TMP("ZISTCP",$J) | ||
367 | 363 | "RTN","ZISTCPS",63,0) | ||
368 | 364 | S $ZINTERRUPT="I $$JOBEXAM^ZU($ZPOSITION)" | ||
369 | 365 | "RTN","ZISTCPS",64,0) | ||
370 | 366 | S NIO="SCK$"_$S($J>86400:$J,1:84600+$J) ;Construct a dummy, but "unique" devicename for job | ||
371 | 367 | "RTN","ZISTCPS",65,0) | ||
372 | 368 | D LOG("Open for Listen "_NIO) | ||
373 | 369 | "RTN","ZISTCPS",66,0) | ||
374 | 370 | ;Open the device | ||
375 | 371 | "RTN","ZISTCPS",67,0) | ||
376 | 372 | O NIO:(ZLISTEN=SOCK_":TCP":ATTACH="listener"):30:"SOCKET" | ||
377 | 373 | "RTN","ZISTCPS",68,0) | ||
378 | 374 | I '$T D LOG("Can't Open Socket: "_SOCK) Q | ||
379 | 375 | "RTN","ZISTCPS",69,0) | ||
380 | 376 | U NIO S NIO("ZISTCP",0)=$KEY D LOG("Have port.") | ||
381 | 377 | "RTN","ZISTCPS",70,0) | ||
382 | 378 | ;Start Listening | ||
383 | 379 | "RTN","ZISTCPS",71,0) | ||
384 | 380 | W /LISTEN(1) S NIO("ZISTCP",1)=$KEY D LOG("Start Listening. "_NIO("ZISTCP",1)) | ||
385 | 381 | "RTN","ZISTCPS",72,0) | ||
386 | 382 | N ZC,ZR,IDX,DESC,LDESC | ||
387 | 383 | "RTN","ZISTCPS",73,0) | ||
388 | 384 | S ZC="ZSHOW ""D"":ZR" | ||
389 | 385 | "RTN","ZISTCPS",74,0) | ||
390 | 386 | X ZC | ||
391 | 387 | "RTN","ZISTCPS",75,0) | ||
392 | 388 | ; Find the listener file descriptor. The child must close it. | ||
393 | 389 | "RTN","ZISTCPS",76,0) | ||
394 | 390 | S LDESC="" F IDX=1:1:$O(ZR("D",""),-1) S:(ZR("D",IDX)["listener")&(ZR("D",IDX)["PORT="_SOCK) LDESC=$P($P(ZR("D",IDX),"DESC=",2)," ",1) Q:LDESC'="" | ||
395 | 391 | "RTN","ZISTCPS",77,0) | ||
396 | 392 | ;Wait for connection | ||
397 | 393 | "RTN","ZISTCPS",78,0) | ||
398 | 394 | LG2 S %A=0,EXIT=0 F D Q:%A!EXIT | ||
399 | 395 | "RTN","ZISTCPS",79,0) | ||
400 | 396 | . U NIO:(SOCKET="listener") | ||
401 | 397 | "RTN","ZISTCPS",80,0) | ||
402 | 398 | . W /WAIT(30) ;Wait for connect | ||
403 | 399 | "RTN","ZISTCPS",81,0) | ||
404 | 400 | . I $P($KEY,"|",1)="CONNECT" S NIO("ZISTCP",2)=$KEY,%A=1 | ||
405 | 401 | "RTN","ZISTCPS",82,0) | ||
406 | 402 | . S EXIT=$$EXIT | ||
407 | 403 | "RTN","ZISTCPS",83,0) | ||
408 | 404 | . Q | ||
409 | 405 | "RTN","ZISTCPS",84,0) | ||
410 | 406 | I EXIT C NIO Q | ||
411 | 407 | "RTN","ZISTCPS",85,0) | ||
412 | 408 | ; | ||
413 | 409 | "RTN","ZISTCPS",86,0) | ||
414 | 410 | S NIO("SOCK")=$P($G(NIO("ZISTCP",2)),"|",2) | ||
415 | 411 | "RTN","ZISTCPS",87,0) | ||
416 | 412 | D LOG("Got connection on "_NIO("SOCK")) | ||
417 | 413 | "RTN","ZISTCPS",88,0) | ||
418 | 414 | I '$$NEWOK D G LG2 | ||
419 | 415 | "RTN","ZISTCPS",89,0) | ||
420 | 416 | . U NIO:(SOCKET=NIO("SOCK")) W "421 Service temporarily down.",$C(13,10),# | ||
421 | 417 | "RTN","ZISTCPS",90,0) | ||
422 | 418 | . C NIO:(SOCKET=NIO("SOCK")) K NIO("ZISTCP",2) | ||
423 | 419 | "RTN","ZISTCPS",91,0) | ||
424 | 420 | . Q | ||
425 | 421 | "RTN","ZISTCPS",92,0) | ||
426 | 422 | ;Find file descriptor | ||
427 | 423 | "RTN","ZISTCPS",93,0) | ||
428 | 424 | X ZC | ||
429 | 425 | "RTN","ZISTCPS",94,0) | ||
430 | 426 | S DESC="" F IDX=1:1:$O(ZR("D",""),-1) S:ZR("D",IDX)[NIO("SOCK") DESC=$P($P(ZR("D",IDX),"DESC=",2)," ",1) Q:DESC'="" | ||
431 | 427 | "RTN","ZISTCPS",95,0) | ||
432 | 428 | I DESC="" D LOG("Can not find file descriptor!") G LG2 | ||
433 | 429 | "RTN","ZISTCPS",96,0) | ||
434 | 430 | ;spawn child process | ||
435 | 431 | "RTN","ZISTCPS",97,0) | ||
436 | 432 | S SPAWNID=$&openvista.gtmserver2(DESC,LDESC,"GTMLNCH^%ZISTCPS") | ||
437 | 433 | "RTN","ZISTCPS",98,0) | ||
438 | 434 | L +^TMP("ZISTCPS",SPAWNID) | ||
439 | 435 | "RTN","ZISTCPS",99,0) | ||
440 | 436 | S ^TMP("ZISTCPS",SPAWNID)=RTN | ||
441 | 437 | "RTN","ZISTCPS",100,0) | ||
442 | 438 | L -^TMP("ZISTCPS",SPAWNID) | ||
443 | 439 | "RTN","ZISTCPS",101,0) | ||
444 | 440 | D LOG("Spawned child "_SPAWNID) | ||
445 | 441 | "RTN","ZISTCPS",102,0) | ||
446 | 442 | ;Close the client socket since the child now has it | ||
447 | 443 | "RTN","ZISTCPS",103,0) | ||
448 | 444 | C NIO:(SOCKET=NIO("SOCK")) | ||
449 | 445 | "RTN","ZISTCPS",104,0) | ||
450 | 446 | G LG2 | ||
451 | 447 | "RTN","ZISTCPS",105,0) | ||
452 | 448 | Q | ||
453 | 449 | "RTN","ZISTCPS",106,0) | ||
454 | 450 | ; | ||
455 | 451 | "RTN","ZISTCPS",107,0) | ||
456 | 452 | GTMLNCH ;Run gt.m job for this connection. | ||
457 | 453 | "RTN","ZISTCPS",108,0) | ||
458 | 454 | N RTN S RTN="" | ||
459 | 455 | "RTN","ZISTCPS",109,0) | ||
460 | 456 | S IO("GTM-IP")=$P($K,"|",3) | ||
461 | 457 | "RTN","ZISTCPS",110,0) | ||
462 | 458 | F D Q:RTN'="" ; Loop until we get entry point | ||
463 | 459 | "RTN","ZISTCPS",111,0) | ||
464 | 460 | . L +^TMP("ZISTCPS",$J) ; Get lock that tells us data is ready | ||
465 | 461 | "RTN","ZISTCPS",112,0) | ||
466 | 462 | . S RTN=$G(^TMP("ZISTCPS",$J)) ; Get entry point | ||
467 | 463 | "RTN","ZISTCPS",113,0) | ||
468 | 464 | . L -^TMP("ZISTCPS",$J) ; release entry point lock | ||
469 | 465 | "RTN","ZISTCPS",114,0) | ||
470 | 466 | . H:RTN="" 1 ; We did not get a entry point, so wait a second for server to populate | ||
471 | 467 | "RTN","ZISTCPS",115,0) | ||
472 | 468 | . Q | ||
473 | 469 | "RTN","ZISTCPS",116,0) | ||
474 | 470 | K ^TMP("ZISTCPS",$J) | ||
475 | 471 | "RTN","ZISTCPS",117,0) | ||
476 | 472 | N NIO,SOCK,ZISOS,EXIT,XQVOL,$ETRAP | ||
477 | 473 | "RTN","ZISTCPS",118,0) | ||
478 | 474 | S U="^",$ETRAP="D ^%ZTER L HALT" | ||
479 | 475 | "RTN","ZISTCPS",119,0) | ||
480 | 476 | S (IO,IO(0))=$P,IO(1,IO)="" | ||
481 | 477 | "RTN","ZISTCPS",120,0) | ||
482 | 478 | D VAR,@RTN | ||
483 | 479 | "RTN","ZISTCPS",121,0) | ||
484 | 480 | Q | ||
485 | 481 | "RTN","ZISTCPS",122,0) | ||
486 | 482 | ; | ||
487 | 483 | "RTN","ZISTCPS",123,0) | ||
488 | 484 | LOG(MSG) ;LOG STATUS | ||
489 | 485 | "RTN","ZISTCPS",124,0) | ||
490 | 486 | N CNT | ||
491 | 487 | "RTN","ZISTCPS",125,0) | ||
492 | 488 | S CNT=$G(^TMP("ZISTCP",$J))+1,^TMP("ZISTCP",$J)=CNT,^($J,CNT)=MSG | ||
493 | 489 | "RTN","ZISTCPS",126,0) | ||
494 | 490 | Q | ||
495 | 491 | "RTN","ZISTCPS",127,0) | ||
496 | 492 | ; | ||
497 | 493 | "VER") | ||
498 | 494 | 8.0^22.0 | ||
499 | 495 | **END** | ||
500 | 496 | **END** | ||
501 | 0 | 497 | ||
502 | === added file 'mumps/XU1508E.m' | |||
503 | --- mumps/XU1508E.m 1970-01-01 00:00:00 +0000 | |||
504 | +++ mumps/XU1508E.m 2010-12-04 06:46:54 +0000 | |||
505 | @@ -0,0 +1,18 @@ | |||
506 | 1 | XU1508E ;MSC/JKT - Environment check routine for XU*8.0*1508 ;3DEC2010 20:18 | ||
507 | 2 | ;;8.0;KERNEL;**1508**;DEC 3, 2010; | ||
508 | 3 | ; | ||
509 | 4 | ; check for presence of $&openvista.gtmserver2 call | ||
510 | 5 | ; | ||
511 | 6 | Q:$G(^%ZOSF("OS"))'["GT.M" | ||
512 | 7 | ; | ||
513 | 8 | N XC,%I,LINE,FOUND,VERSION | ||
514 | 9 | S XC=$$GTMPATH^ZCD($$CURRENT^ZCD())_"/openvista.xc" | ||
515 | 10 | S %I=$I O XC:(READONLY) U XC | ||
516 | 11 | S FOUND=0 F R LINE Q:LINE="" S:$P(LINE,":",1)="gtmserver2" FOUND=1 | ||
517 | 12 | C XC U %I | ||
518 | 13 | I 'FOUND D | ||
519 | 14 | . S VERSION=$TR($E($P($ZV," ",2),2,999),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") | ||
520 | 15 | . S VERSION=$P(VERSION,"-")_$P(VERSION,"-",2) | ||
521 | 16 | . D BMES^XPDUTL("** You must install version 0.8.11 or later of the openvista-libs-"_VERSION_" Linux package before installing this build **") | ||
522 | 17 | . S XPDABORT=1 | ||
523 | 18 | Q | ||
524 | 0 | 19 | ||
525 | === modified file 'mumps/ZISTCPS.m' | |||
526 | --- mumps/ZISTCPS.m 2009-06-05 20:09:12 +0000 | |||
527 | +++ mumps/ZISTCPS.m 2010-12-04 06:46:54 +0000 | |||
528 | @@ -1,5 +1,5 @@ | |||
531 | 1 | %ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;22APR2009 | 1 | %ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;03DEC2010 |
532 | 2 | ;;8.0;KERNEL;**78,118,127,225,275,388,MSC**;Jul 10, 1995 | 2 | ;;8.0;KERNEL;**78,118,127,225,275,388,1508**;Jul 10, 1995 |
533 | 3 | Q | 3 | Q |
534 | 4 | ; | 4 | ; |
535 | 5 | CLOSE ;Close and reset | 5 | CLOSE ;Close and reset |
536 | @@ -69,8 +69,11 @@ | |||
537 | 69 | U NIO S NIO("ZISTCP",0)=$KEY D LOG("Have port.") | 69 | U NIO S NIO("ZISTCP",0)=$KEY D LOG("Have port.") |
538 | 70 | ;Start Listening | 70 | ;Start Listening |
539 | 71 | W /LISTEN(1) S NIO("ZISTCP",1)=$KEY D LOG("Start Listening. "_NIO("ZISTCP",1)) | 71 | W /LISTEN(1) S NIO("ZISTCP",1)=$KEY D LOG("Start Listening. "_NIO("ZISTCP",1)) |
541 | 72 | N ZC,ZR,IDX,DESC | 72 | N ZC,ZR,IDX,DESC,LDESC |
542 | 73 | S ZC="ZSHOW ""D"":ZR" | 73 | S ZC="ZSHOW ""D"":ZR" |
543 | 74 | X ZC | ||
544 | 75 | ; Find the listener file descriptor. The child must close it. | ||
545 | 76 | S LDESC="" F IDX=1:1:$O(ZR("D",""),-1) S:(ZR("D",IDX)["listener")&(ZR("D",IDX)["PORT="_SOCK) LDESC=$P($P(ZR("D",IDX),"DESC=",2)," ",1) Q:LDESC'="" | ||
546 | 74 | ;Wait for connection | 77 | ;Wait for connection |
547 | 75 | LG2 S %A=0,EXIT=0 F D Q:%A!EXIT | 78 | LG2 S %A=0,EXIT=0 F D Q:%A!EXIT |
548 | 76 | . U NIO:(SOCKET="listener") | 79 | . U NIO:(SOCKET="listener") |
549 | @@ -91,7 +94,7 @@ | |||
550 | 91 | S DESC="" F IDX=1:1:$O(ZR("D",""),-1) S:ZR("D",IDX)[NIO("SOCK") DESC=$P($P(ZR("D",IDX),"DESC=",2)," ",1) Q:DESC'="" | 94 | S DESC="" F IDX=1:1:$O(ZR("D",""),-1) S:ZR("D",IDX)[NIO("SOCK") DESC=$P($P(ZR("D",IDX),"DESC=",2)," ",1) Q:DESC'="" |
551 | 92 | I DESC="" D LOG("Can not find file descriptor!") G LG2 | 95 | I DESC="" D LOG("Can not find file descriptor!") G LG2 |
552 | 93 | ;spawn child process | 96 | ;spawn child process |
554 | 94 | S SPAWNID=$&openvista.gtmserver(DESC,"GTMLNCH^%ZISTCPS") | 97 | S SPAWNID=$&openvista.gtmserver2(DESC,LDESC,"GTMLNCH^%ZISTCPS") |
555 | 95 | L +^TMP("ZISTCPS",SPAWNID) | 98 | L +^TMP("ZISTCPS",SPAWNID) |
556 | 96 | S ^TMP("ZISTCPS",SPAWNID)=RTN | 99 | S ^TMP("ZISTCPS",SPAWNID)=RTN |
557 | 97 | L -^TMP("ZISTCPS",SPAWNID) | 100 | L -^TMP("ZISTCPS",SPAWNID) |
558 | 98 | 101 | ||
559 | === modified file 'src/libopenvista/GTMSRV.m' | |||
560 | --- src/libopenvista/GTMSRV.m 2009-04-23 04:45:12 +0000 | |||
561 | +++ src/libopenvista/GTMSRV.m 2010-12-04 06:46:54 +0000 | |||
562 | @@ -26,15 +26,19 @@ | |||
563 | 26 | Open TCPDEV:(ZLISTEN=PORTNO_":TCP":attach="listener"):TIMEOUT:"SOCKET" | 26 | Open TCPDEV:(ZLISTEN=PORTNO_":TCP":attach="listener"):TIMEOUT:"SOCKET" |
564 | 27 | Use TCPDEV | 27 | Use TCPDEV |
565 | 28 | Write /listen(1) | 28 | Write /listen(1) |
566 | 29 | ZSHOW "D":ZS | ||
567 | 30 | N IDX,LDESC S LDESC="" F IDX=1:1:$O(ZS("D",""),-1) D Q:LDESC'="" | ||
568 | 31 | . S:ZS("D",IDX)["listener"&(ZS("D",IDX)["PORT="_PORTNO) LDESC=$P($P(ZS("D",IDX),"DESC=",2)," ",1) | ||
569 | 32 | . Q | ||
570 | 29 | F D | 33 | F D |
571 | 30 | . Use TCPDEV:(SOCKET="listener") | 34 | . Use TCPDEV:(SOCKET="listener") |
572 | 31 | . Write /wait(TIMEOUT) | 35 | . Write /wait(TIMEOUT) |
573 | 32 | . N HANDLE S HANDLE=$P($KEY,"|",2) | 36 | . N HANDLE S HANDLE=$P($KEY,"|",2) |
574 | 33 | . K ZS ZSHOW "D":ZS | 37 | . K ZS ZSHOW "D":ZS |
576 | 34 | . N IDX,DESC S DESC="" F IDX=1:1:$O(ZS("D",""),-1) D Q:DESC'="" | 38 | . N DESC S DESC="" F IDX=1:1:$O(ZS("D",""),-1) D Q:DESC'="" |
577 | 35 | . . S:ZS("D",IDX)[HANDLE DESC=$P($P(ZS("D",IDX),"DESC=",2)," ",1) | 39 | . . S:ZS("D",IDX)[HANDLE DESC=$P($P(ZS("D",IDX),"DESC=",2)," ",1) |
578 | 36 | . . Q | 40 | . . Q |
580 | 37 | . D >mserver(DESC,CMD) | 41 | . D >mserver2(DESC,LDESC,CMD) |
581 | 38 | . C TCPDEV:(socket=HANDLE) | 42 | . C TCPDEV:(socket=HANDLE) |
582 | 39 | . Q | 43 | . Q |
583 | 40 | Q | 44 | Q |
584 | 41 | 45 | ||
585 | === modified file 'src/libopenvista/gtmserver.c' | |||
586 | --- src/libopenvista/gtmserver.c 2009-04-23 04:45:12 +0000 | |||
587 | +++ src/libopenvista/gtmserver.c 2010-12-04 06:46:54 +0000 | |||
588 | @@ -37,18 +37,103 @@ | |||
589 | 37 | ret_val = -1; | 37 | ret_val = -1; |
590 | 38 | grandchild_id = -1; | 38 | grandchild_id = -1; |
591 | 39 | 39 | ||
604 | 40 | RETRY_EINTR(result=pipe(fds)); | 40 | fprintf(stderr, "$&openvista.gtmserver is deprecated; use $&openvista.gtmserver2 instead\n"); |
605 | 41 | if (result<0) { | 41 | fprintf(stderr, "OpenVista users can upgrade by installing XU*8.0*1508 and running ZTMGRSET\n\n"); |
606 | 42 | perror("pipe()"); | 42 | |
607 | 43 | return ret_val; | 43 | RETRY_EINTR(result=pipe(fds)); |
608 | 44 | } | 44 | if (result<0) { |
609 | 45 | child_id=fork(); | 45 | perror("pipe()"); |
610 | 46 | if (child_id<0) { | 46 | return ret_val; |
611 | 47 | perror("child fork()"); | 47 | } |
612 | 48 | return ret_val; | 48 | child_id=fork(); |
613 | 49 | } | 49 | if (child_id<0) { |
614 | 50 | if (child_id==0) { | 50 | perror("child fork()"); |
615 | 51 | /* In child */ | 51 | return ret_val; |
616 | 52 | } | ||
617 | 53 | if (child_id==0) { | ||
618 | 54 | /* In child */ | ||
619 | 55 | RETRY_EINTR(result=close(fds[0]) ); | ||
620 | 56 | if (result != 0) { | ||
621 | 57 | perror("child close()"); | ||
622 | 58 | SEND_PID; | ||
623 | 59 | } | ||
624 | 60 | /* | ||
625 | 61 | * Fork again. Child exits and is reaped so as not to be a zombie. | ||
626 | 62 | * Grandchild will be the actual client, which will be reaped by init. | ||
627 | 63 | */ | ||
628 | 64 | grandchild_id=fork(); | ||
629 | 65 | if (grandchild_id<0) { | ||
630 | 66 | perror("grandchild fork()"); | ||
631 | 67 | SEND_PID; | ||
632 | 68 | } | ||
633 | 69 | if (!grandchild_id) { | ||
634 | 70 | /* In grandchild */ | ||
635 | 71 | RETRY_EINTR(dup2(connfd, STDIN_FILENO)); | ||
636 | 72 | RETRY_EINTR(dup2(connfd, STDOUT_FILENO)); | ||
637 | 73 | execlp("mumps", "mumps", "-run", cmd, (char*)0); | ||
638 | 74 | /* We should never get here */ | ||
639 | 75 | perror("execlp() returned"); | ||
640 | 76 | _exit(-1); /* Do not do atexit() callbacks */ | ||
641 | 77 | } else { | ||
642 | 78 | /* Still in child. Send grandchild pid to parent. */ | ||
643 | 79 | if (SEND_PID<0) { | ||
644 | 80 | perror("child write()"); | ||
645 | 81 | _exit(-1); | ||
646 | 82 | } | ||
647 | 83 | if (close(fds[1]) != 0) { | ||
648 | 84 | perror("child close()"); | ||
649 | 85 | } | ||
650 | 86 | RETRY_EINTR(sleep(1000)); /* parent will kill us */ | ||
651 | 87 | _exit(0); | ||
652 | 88 | } | ||
653 | 89 | } else if (child_id) { | ||
654 | 90 | /* still in parent */ | ||
655 | 91 | int bytes_read; | ||
656 | 92 | int status; | ||
657 | 93 | RETRY_EINTR(result=close(fds[1])); | ||
658 | 94 | if (result != 0) { | ||
659 | 95 | perror("parent close(fds[1])"); | ||
660 | 96 | } | ||
661 | 97 | while( (bytes_read = read(fds[0], &ret_val, sizeof ret_val))==-1 && errno==EINTR) ; | ||
662 | 98 | //RETRY_EINTR(bytes_read = read(fds[0], &ret_val, sizeof ret_val)); | ||
663 | 99 | if (bytes_read != sizeof ret_val) { | ||
664 | 100 | perror("incomplete read()"); | ||
665 | 101 | /* ret_val = -1; */ | ||
666 | 102 | } | ||
667 | 103 | RETRY_EINTR(result=close(fds[0])); | ||
668 | 104 | if (result != 0) { | ||
669 | 105 | perror("parent close(fds[0])"); | ||
670 | 106 | } | ||
671 | 107 | kill(child_id, SIGKILL); | ||
672 | 108 | waitpid(child_id, &status, 0); | ||
673 | 109 | return ret_val; | ||
674 | 110 | } | ||
675 | 111 | } | ||
676 | 112 | |||
677 | 113 | xc_long_t gtmserver2(int count, int connfd, int listen_fd, const char *cmd) { | ||
678 | 114 | int fds[2]; | ||
679 | 115 | int child_id; | ||
680 | 116 | int grandchild_id; | ||
681 | 117 | int ret_val; | ||
682 | 118 | int pid; | ||
683 | 119 | int result; | ||
684 | 120 | |||
685 | 121 | ret_val = -1; | ||
686 | 122 | grandchild_id = -1; | ||
687 | 123 | |||
688 | 124 | RETRY_EINTR(result=pipe(fds)); | ||
689 | 125 | if (result<0) { | ||
690 | 126 | perror("pipe()"); | ||
691 | 127 | return ret_val; | ||
692 | 128 | } | ||
693 | 129 | child_id=fork(); | ||
694 | 130 | if (child_id<0) { | ||
695 | 131 | perror("child fork()"); | ||
696 | 132 | return ret_val; | ||
697 | 133 | } | ||
698 | 134 | if (child_id==0) { | ||
699 | 135 | /* In child */ | ||
700 | 136 | RETRY_EINTR(close(listen_fd)); | ||
701 | 52 | RETRY_EINTR(result=close(fds[0]) ); | 137 | RETRY_EINTR(result=close(fds[0]) ); |
702 | 53 | if (result != 0) { | 138 | if (result != 0) { |
703 | 54 | perror("child close()"); | 139 | perror("child close()"); |
704 | 55 | 140 | ||
705 | === modified file 'src/libopenvista/openvista.xc.in' | |||
706 | --- src/libopenvista/openvista.xc.in 2009-07-08 04:08:14 +0000 | |||
707 | +++ src/libopenvista/openvista.xc.in 2010-12-04 06:46:54 +0000 | |||
708 | @@ -1,2 +1,3 @@ | |||
709 | 1 | @GTM_DIST@/libopenvista.so | 1 | @GTM_DIST@/libopenvista.so |
710 | 2 | gtmserver: xc_long_t gtmserver(I:xc_long_t, I:xc_char_t*) | 2 | gtmserver: xc_long_t gtmserver(I:xc_long_t, I:xc_char_t*) |
711 | 3 | gtmserver2: xc_long_t gtmserver2(I:xc_long_t, I:xc_long_t, I:xc_char_t*) |
Make sure that waitpid is guarded against interruption in the next patch.