Merge lp:~jontai/openvista-gtm-integration/bug683878 into lp:openvista-gtm-integration

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
Reviewer Review Type Date Requested Status
jeff.apple Approve
Review via email: mp+42721@code.launchpad.net

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.
Revision history for this message
jeff.apple (jeff-apple) wrote :

Make sure that waitpid is guarded against interruption in the next patch.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'kids/XU_80_1508.KID'
--- kids/XU_80_1508.KID 1970-01-01 00:00:00 +0000
+++ kids/XU_80_1508.KID 2010-12-04 06:46:54 +0000
@@ -0,0 +1,496 @@
1KIDS Distribution saved on Dec 03, 2010@21:05:29
2artf10843, run ZTMGRSET after installing
3**KIDS**:XU*8.0*1508^
4
5**INSTALL NAME**
6XU*8.0*1508
7"BLD",7335,0)
8XU*8.0*1508^KERNEL^0^3101203^n
9"BLD",7335,4,0)
10^9.64PA^^
11"BLD",7335,6.3)
121
13"BLD",7335,"ABPKG")
14n
15"BLD",7335,"INID")
16y
17"BLD",7335,"KRN",0)
18^9.67PA^8989.52^19
19"BLD",7335,"KRN",.4,0)
20.4
21"BLD",7335,"KRN",.401,0)
22.401
23"BLD",7335,"KRN",.402,0)
24.402
25"BLD",7335,"KRN",.403,0)
26.403
27"BLD",7335,"KRN",.5,0)
28.5
29"BLD",7335,"KRN",.84,0)
30.84
31"BLD",7335,"KRN",3.6,0)
323.6
33"BLD",7335,"KRN",3.8,0)
343.8
35"BLD",7335,"KRN",9.2,0)
369.2
37"BLD",7335,"KRN",9.8,0)
389.8
39"BLD",7335,"KRN",9.8,"NM",0)
40^9.68A^1^1
41"BLD",7335,"KRN",9.8,"NM",1,0)
42ZISTCPS^^0^B20023114
43"BLD",7335,"KRN",9.8,"NM","B","ZISTCPS",1)
44
45"BLD",7335,"KRN",19,0)
4619
47"BLD",7335,"KRN",19.1,0)
4819.1
49"BLD",7335,"KRN",101,0)
50101
51"BLD",7335,"KRN",409.61,0)
52409.61
53"BLD",7335,"KRN",771,0)
54771
55"BLD",7335,"KRN",870,0)
56870
57"BLD",7335,"KRN",8989.51,0)
588989.51
59"BLD",7335,"KRN",8989.52,0)
608989.52
61"BLD",7335,"KRN",8994,0)
628994
63"BLD",7335,"KRN","B",.4,.4)
64
65"BLD",7335,"KRN","B",.401,.401)
66
67"BLD",7335,"KRN","B",.402,.402)
68
69"BLD",7335,"KRN","B",.403,.403)
70
71"BLD",7335,"KRN","B",.5,.5)
72
73"BLD",7335,"KRN","B",.84,.84)
74
75"BLD",7335,"KRN","B",3.6,3.6)
76
77"BLD",7335,"KRN","B",3.8,3.8)
78
79"BLD",7335,"KRN","B",9.2,9.2)
80
81"BLD",7335,"KRN","B",9.8,9.8)
82
83"BLD",7335,"KRN","B",19,19)
84
85"BLD",7335,"KRN","B",19.1,19.1)
86
87"BLD",7335,"KRN","B",101,101)
88
89"BLD",7335,"KRN","B",409.61,409.61)
90
91"BLD",7335,"KRN","B",771,771)
92
93"BLD",7335,"KRN","B",870,870)
94
95"BLD",7335,"KRN","B",8989.51,8989.51)
96
97"BLD",7335,"KRN","B",8989.52,8989.52)
98
99"BLD",7335,"KRN","B",8994,8994)
100
101"BLD",7335,"MSC")
102/home/jon/XU_80_1508.KID
103"BLD",7335,"MSCOM")
104artf10843, run ZTMGRSET after installing
105"BLD",7335,"PRE")
106XU1508E
107"BLD",7335,"QUES",0)
108^9.62^^
109"BLD",7335,"REQB",0)
110^9.611^^
111"MBREQ")
1120
113"PKG",3,-1)
1141^1
115"PKG",3,0)
116KERNEL^XU^SIGN-ON, SECURITY, MENU DRIVER, DEVICES, TASKMAN^
117"PKG",3,20,0)
118^9.402P^^
119"PKG",3,22,0)
120^9.49I^1^1
121"PKG",3,22,1,0)
1228.0^3040115^2960606^1
123"PKG",3,22,1,"PAH",1,0)
1241508^3101203
125"PRE")
126XU1508E
127"QUES","XPF1",0)
128Y
129"QUES","XPF1","??")
130^D REP^XPDH
131"QUES","XPF1","A")
132Shall I write over your |FLAG| File
133"QUES","XPF1","B")
134YES
135"QUES","XPF1","M")
136D XPF1^XPDIQ
137"QUES","XPF2",0)
138Y
139"QUES","XPF2","??")
140^D DTA^XPDH
141"QUES","XPF2","A")
142Want my data |FLAG| yours
143"QUES","XPF2","B")
144YES
145"QUES","XPF2","M")
146D XPF2^XPDIQ
147"QUES","XPI1",0)
148YO
149"QUES","XPI1","??")
150^D INHIBIT^XPDH
151"QUES","XPI1","A")
152Want KIDS to INHIBIT LOGONs during the install
153"QUES","XPI1","B")
154NO
155"QUES","XPI1","M")
156D XPI1^XPDIQ
157"QUES","XPM1",0)
158PO^VA(200,:EM
159"QUES","XPM1","??")
160^D MG^XPDH
161"QUES","XPM1","A")
162Enter the Coordinator for Mail Group '|FLAG|'
163"QUES","XPM1","B")
164
165"QUES","XPM1","M")
166D XPM1^XPDIQ
167"QUES","XPO1",0)
168Y
169"QUES","XPO1","??")
170^D MENU^XPDH
171"QUES","XPO1","A")
172Want KIDS to Rebuild Menu Trees Upon Completion of Install
173"QUES","XPO1","B")
174NO
175"QUES","XPO1","M")
176D XPO1^XPDIQ
177"QUES","XPZ1",0)
178Y
179"QUES","XPZ1","??")
180^D OPT^XPDH
181"QUES","XPZ1","A")
182Want to DISABLE Scheduled Options, Menu Options, and Protocols
183"QUES","XPZ1","B")
184NO
185"QUES","XPZ1","M")
186D XPZ1^XPDIQ
187"QUES","XPZ2",0)
188Y
189"QUES","XPZ2","??")
190^D RTN^XPDH
191"QUES","XPZ2","A")
192Want to MOVE routines to other CPUs
193"QUES","XPZ2","B")
194NO
195"QUES","XPZ2","M")
196D XPZ2^XPDIQ
197"RTN")
1982
199"RTN","XU1508E")
2000^^B2244259
201"RTN","XU1508E",1,0)
202XU1508E ;MSC/JKT - Environment check routine for XU*8.0*1508 ;3DEC2010 20:18
203"RTN","XU1508E",2,0)
204 ;;8.0;KERNEL;**1508**;DEC 3, 2010;
205"RTN","XU1508E",3,0)
206 ;
207"RTN","XU1508E",4,0)
208 ; check for presence of $&openvista.gtmserver2 call
209"RTN","XU1508E",5,0)
210 ;
211"RTN","XU1508E",6,0)
212 Q:$G(^%ZOSF("OS"))'["GT.M"
213"RTN","XU1508E",7,0)
214 ;
215"RTN","XU1508E",8,0)
216 N XC,%I,LINE,FOUND,VERSION
217"RTN","XU1508E",9,0)
218 S XC=$$GTMPATH^ZCD($$CURRENT^ZCD())_"/openvista.xc"
219"RTN","XU1508E",10,0)
220 S %I=$I O XC:(READONLY) U XC
221"RTN","XU1508E",11,0)
222 S FOUND=0 F R LINE Q:LINE="" S:$P(LINE,":",1)="gtmserver2" FOUND=1
223"RTN","XU1508E",12,0)
224 C XC U %I
225"RTN","XU1508E",13,0)
226 I 'FOUND D
227"RTN","XU1508E",14,0)
228 . S VERSION=$TR($E($P($ZV," ",2),2,999),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
229"RTN","XU1508E",15,0)
230 . S VERSION=$P(VERSION,"-")_$P(VERSION,"-",2)
231"RTN","XU1508E",16,0)
232 . D BMES^XPDUTL("** You must install version 0.8.11 or later of the openvista-libs-"_VERSION_" Linux package before installing this build **")
233"RTN","XU1508E",17,0)
234 . S XPDABORT=1
235"RTN","XU1508E",18,0)
236 Q
237"RTN","ZISTCPS")
2380^1^B20023114
239"RTN","ZISTCPS",1,0)
240%ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;03DEC2010
241"RTN","ZISTCPS",2,0)
242 ;;8.0;KERNEL;**78,118,127,225,275,388,1508**;Jul 10, 1995
243"RTN","ZISTCPS",3,0)
244 Q
245"RTN","ZISTCPS",4,0)
246 ;
247"RTN","ZISTCPS",5,0)
248CLOSE ;Close and reset
249"RTN","ZISTCPS",6,0)
250 G CLOSE^%ZISTCP
251"RTN","ZISTCPS",7,0)
252 Q
253"RTN","ZISTCPS",8,0)
254 ;
255"RTN","ZISTCPS",9,0)
256 ;In ZRULE, set ZISQUIT=1 to quit
257"RTN","ZISTCPS",10,0)
258LISTEN(SOCK,RTN,ZRULE) ;Listen on socket, start routine
259"RTN","ZISTCPS",11,0)
260 N %A,ZISOS,X,NIO,EXIT
261"RTN","ZISTCPS",12,0)
262 N $ES,$ET S $ETRAP="D OPNERR^%ZISTCPS"
263"RTN","ZISTCPS",13,0)
264 S ZISOS=^%ZOSF("OS"),ZRULE=$G(ZRULE)
265"RTN","ZISTCPS",14,0)
266 S POP=1
267"RTN","ZISTCPS",15,0)
268 D GETENV^%ZOSV S U="^",XUENV=Y,XQVOL=$P(Y,U,2)
269"RTN","ZISTCPS",16,0)
270 S POP=1 D LONT:ZISOS["OpenM",LGTM:ZISOS["GT.M"
271"RTN","ZISTCPS",17,0)
272 I 'POP C NIO ;Close port
273"RTN","ZISTCPS",18,0)
274 Q
275"RTN","ZISTCPS",19,0)
276 ;
277"RTN","ZISTCPS",20,0)
278 ;
279"RTN","ZISTCPS",21,0)
280LONT ;Open port in Accept mode with standard terminators.
281"RTN","ZISTCPS",22,0)
282 N %ZA,NEWCHAR
283"RTN","ZISTCPS",23,0)
284 S NIO="|TCP|"_SOCK,EXIT=0
285"RTN","ZISTCPS",24,0)
286 ;(adr:sock:term:ibuf:obuf:queue)
287"RTN","ZISTCPS",25,0)
288 O NIO:(:SOCK:"AT"::512:512:10):30 Q:'$T S POP=0 U NIO
289"RTN","ZISTCPS",26,0)
290 ;Wait on read for a connect
291"RTN","ZISTCPS",27,0)
292LONT2 F U NIO R *NEWCHAR:30 S EXIT=$$EXIT Q:$T!EXIT
293"RTN","ZISTCPS",28,0)
294 I EXIT C NIO Q
295"RTN","ZISTCPS",29,0)
296 ;JOB params (:Concurrent Server bit:principal input:principal output)
297"RTN","ZISTCPS",30,0)
298 J CHILDONT^%ZISTCPS(NIO,RTN):(:16::):10 S %ZA=$ZA
299"RTN","ZISTCPS",31,0)
300 I %ZA\8196#2=1 W *-2 ;Job failed to clear bit
301"RTN","ZISTCPS",32,0)
302 G LONT2
303"RTN","ZISTCPS",33,0)
304 ;
305"RTN","ZISTCPS",34,0)
306CHILDONT(IO,RTN) ;Child process for OpenM
307"RTN","ZISTCPS",35,0)
308 S $ETRAP="D ^%ZTER L HALT",IO=$ZU(53)
309"RTN","ZISTCPS",36,0)
310 U IO:(::"-M") ;Work like DSM
311"RTN","ZISTCPS",37,0)
312 S NEWJOB=$$NEWOK
313"RTN","ZISTCPS",38,0)
314 I 'NEWJOB W "421 Service temporarily down.",$C(13,10),!
315"RTN","ZISTCPS",39,0)
316 I NEWJOB K NEWJOB D VAR,@RTN
317"RTN","ZISTCPS",40,0)
318 HALT
319"RTN","ZISTCPS",41,0)
320 ;
321"RTN","ZISTCPS",42,0)
322VAR ;Setup IO variables
323"RTN","ZISTCPS",43,0)
324 S IO(0)=IO,IO(1,IO)="",POP=0
325"RTN","ZISTCPS",44,0)
326 S IOT="TCP",IOST="P-TCP",IOST(0)=0
327"RTN","ZISTCPS",45,0)
328 S IOF=$$FLUSHCHR^%ZISTCP
329"RTN","ZISTCPS",46,0)
330 S ^XUTL("XQ",$J,0)=$$DT^XLFDT
331"RTN","ZISTCPS",47,0)
332 Q
333"RTN","ZISTCPS",48,0)
334NEWOK() ;Is it OK to start a new process
335"RTN","ZISTCPS",49,0)
336 I $G(^%ZIS(14.5,"LOGON",^%ZOSF("VOL"))) Q 0
337"RTN","ZISTCPS",50,0)
338 I $$AVJ^%ZOSV()<3 Q 0
339"RTN","ZISTCPS",51,0)
340 Q 1
341"RTN","ZISTCPS",52,0)
342OPNERR ;
343"RTN","ZISTCPS",53,0)
344 S POP=1,EXIT=1,IO("ERROR")=$ECODE,$ECODE=""
345"RTN","ZISTCPS",54,0)
346 Q
347"RTN","ZISTCPS",55,0)
348EXIT() ;See if time to exit
349"RTN","ZISTCPS",56,0)
350 I $$S^%ZTLOAD Q 1
351"RTN","ZISTCPS",57,0)
352 N ZISQUIT S ZISQUIT=0
353"RTN","ZISTCPS",58,0)
354 I $L(ZRULE) X ZRULE I $G(ZISQUIT) Q 1
355"RTN","ZISTCPS",59,0)
356 Q 0
357"RTN","ZISTCPS",60,0)
358 ;
359"RTN","ZISTCPS",61,0)
360LGTM ;GT.M multi thread server
361"RTN","ZISTCPS",62,0)
362 N %A K ^TMP("ZISTCP",$J)
363"RTN","ZISTCPS",63,0)
364 S $ZINTERRUPT="I $$JOBEXAM^ZU($ZPOSITION)"
365"RTN","ZISTCPS",64,0)
366 S NIO="SCK$"_$S($J>86400:$J,1:84600+$J) ;Construct a dummy, but "unique" devicename for job
367"RTN","ZISTCPS",65,0)
368 D LOG("Open for Listen "_NIO)
369"RTN","ZISTCPS",66,0)
370 ;Open the device
371"RTN","ZISTCPS",67,0)
372 O NIO:(ZLISTEN=SOCK_":TCP":ATTACH="listener"):30:"SOCKET"
373"RTN","ZISTCPS",68,0)
374 I '$T D LOG("Can't Open Socket: "_SOCK) Q
375"RTN","ZISTCPS",69,0)
376 U NIO S NIO("ZISTCP",0)=$KEY D LOG("Have port.")
377"RTN","ZISTCPS",70,0)
378 ;Start Listening
379"RTN","ZISTCPS",71,0)
380 W /LISTEN(1) S NIO("ZISTCP",1)=$KEY D LOG("Start Listening. "_NIO("ZISTCP",1))
381"RTN","ZISTCPS",72,0)
382 N ZC,ZR,IDX,DESC,LDESC
383"RTN","ZISTCPS",73,0)
384 S ZC="ZSHOW ""D"":ZR"
385"RTN","ZISTCPS",74,0)
386 X ZC
387"RTN","ZISTCPS",75,0)
388 ; Find the listener file descriptor. The child must close it.
389"RTN","ZISTCPS",76,0)
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'=""
391"RTN","ZISTCPS",77,0)
392 ;Wait for connection
393"RTN","ZISTCPS",78,0)
394LG2 S %A=0,EXIT=0 F D Q:%A!EXIT
395"RTN","ZISTCPS",79,0)
396 . U NIO:(SOCKET="listener")
397"RTN","ZISTCPS",80,0)
398 . W /WAIT(30) ;Wait for connect
399"RTN","ZISTCPS",81,0)
400 . I $P($KEY,"|",1)="CONNECT" S NIO("ZISTCP",2)=$KEY,%A=1
401"RTN","ZISTCPS",82,0)
402 . S EXIT=$$EXIT
403"RTN","ZISTCPS",83,0)
404 . Q
405"RTN","ZISTCPS",84,0)
406 I EXIT C NIO Q
407"RTN","ZISTCPS",85,0)
408 ;
409"RTN","ZISTCPS",86,0)
410 S NIO("SOCK")=$P($G(NIO("ZISTCP",2)),"|",2)
411"RTN","ZISTCPS",87,0)
412 D LOG("Got connection on "_NIO("SOCK"))
413"RTN","ZISTCPS",88,0)
414 I '$$NEWOK D G LG2
415"RTN","ZISTCPS",89,0)
416 . U NIO:(SOCKET=NIO("SOCK")) W "421 Service temporarily down.",$C(13,10),#
417"RTN","ZISTCPS",90,0)
418 . C NIO:(SOCKET=NIO("SOCK")) K NIO("ZISTCP",2)
419"RTN","ZISTCPS",91,0)
420 . Q
421"RTN","ZISTCPS",92,0)
422 ;Find file descriptor
423"RTN","ZISTCPS",93,0)
424 X ZC
425"RTN","ZISTCPS",94,0)
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'=""
427"RTN","ZISTCPS",95,0)
428 I DESC="" D LOG("Can not find file descriptor!") G LG2
429"RTN","ZISTCPS",96,0)
430 ;spawn child process
431"RTN","ZISTCPS",97,0)
432 S SPAWNID=$&openvista.gtmserver2(DESC,LDESC,"GTMLNCH^%ZISTCPS")
433"RTN","ZISTCPS",98,0)
434 L +^TMP("ZISTCPS",SPAWNID)
435"RTN","ZISTCPS",99,0)
436 S ^TMP("ZISTCPS",SPAWNID)=RTN
437"RTN","ZISTCPS",100,0)
438 L -^TMP("ZISTCPS",SPAWNID)
439"RTN","ZISTCPS",101,0)
440 D LOG("Spawned child "_SPAWNID)
441"RTN","ZISTCPS",102,0)
442 ;Close the client socket since the child now has it
443"RTN","ZISTCPS",103,0)
444 C NIO:(SOCKET=NIO("SOCK"))
445"RTN","ZISTCPS",104,0)
446 G LG2
447"RTN","ZISTCPS",105,0)
448 Q
449"RTN","ZISTCPS",106,0)
450 ;
451"RTN","ZISTCPS",107,0)
452GTMLNCH ;Run gt.m job for this connection.
453"RTN","ZISTCPS",108,0)
454 N RTN S RTN=""
455"RTN","ZISTCPS",109,0)
456 S IO("GTM-IP")=$P($K,"|",3)
457"RTN","ZISTCPS",110,0)
458 F D Q:RTN'="" ; Loop until we get entry point
459"RTN","ZISTCPS",111,0)
460 . L +^TMP("ZISTCPS",$J) ; Get lock that tells us data is ready
461"RTN","ZISTCPS",112,0)
462 . S RTN=$G(^TMP("ZISTCPS",$J)) ; Get entry point
463"RTN","ZISTCPS",113,0)
464 . L -^TMP("ZISTCPS",$J) ; release entry point lock
465"RTN","ZISTCPS",114,0)
466 . H:RTN="" 1 ; We did not get a entry point, so wait a second for server to populate
467"RTN","ZISTCPS",115,0)
468 . Q
469"RTN","ZISTCPS",116,0)
470 K ^TMP("ZISTCPS",$J)
471"RTN","ZISTCPS",117,0)
472 N NIO,SOCK,ZISOS,EXIT,XQVOL,$ETRAP
473"RTN","ZISTCPS",118,0)
474 S U="^",$ETRAP="D ^%ZTER L HALT"
475"RTN","ZISTCPS",119,0)
476 S (IO,IO(0))=$P,IO(1,IO)=""
477"RTN","ZISTCPS",120,0)
478 D VAR,@RTN
479"RTN","ZISTCPS",121,0)
480 Q
481"RTN","ZISTCPS",122,0)
482 ;
483"RTN","ZISTCPS",123,0)
484LOG(MSG) ;LOG STATUS
485"RTN","ZISTCPS",124,0)
486 N CNT
487"RTN","ZISTCPS",125,0)
488 S CNT=$G(^TMP("ZISTCP",$J))+1,^TMP("ZISTCP",$J)=CNT,^($J,CNT)=MSG
489"RTN","ZISTCPS",126,0)
490 Q
491"RTN","ZISTCPS",127,0)
492 ;
493"VER")
4948.0^22.0
495**END**
496**END**
0497
=== added file 'mumps/XU1508E.m'
--- mumps/XU1508E.m 1970-01-01 00:00:00 +0000
+++ mumps/XU1508E.m 2010-12-04 06:46:54 +0000
@@ -0,0 +1,18 @@
1XU1508E ;MSC/JKT - Environment check routine for XU*8.0*1508 ;3DEC2010 20:18
2 ;;8.0;KERNEL;**1508**;DEC 3, 2010;
3 ;
4 ; check for presence of $&openvista.gtmserver2 call
5 ;
6 Q:$G(^%ZOSF("OS"))'["GT.M"
7 ;
8 N XC,%I,LINE,FOUND,VERSION
9 S XC=$$GTMPATH^ZCD($$CURRENT^ZCD())_"/openvista.xc"
10 S %I=$I O XC:(READONLY) U XC
11 S FOUND=0 F R LINE Q:LINE="" S:$P(LINE,":",1)="gtmserver2" FOUND=1
12 C XC U %I
13 I 'FOUND D
14 . S VERSION=$TR($E($P($ZV," ",2),2,999),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")
15 . S VERSION=$P(VERSION,"-")_$P(VERSION,"-",2)
16 . D BMES^XPDUTL("** You must install version 0.8.11 or later of the openvista-libs-"_VERSION_" Linux package before installing this build **")
17 . S XPDABORT=1
18 Q
019
=== modified file 'mumps/ZISTCPS.m'
--- mumps/ZISTCPS.m 2009-06-05 20:09:12 +0000
+++ mumps/ZISTCPS.m 2010-12-04 06:46:54 +0000
@@ -1,5 +1,5 @@
1%ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;22APR20091%ZISTCPS ;ISF/RWF MSC/JDA - DEVICE HANDLER TCP/IP SERVER CALLS ;03DEC2010
2 ;;8.0;KERNEL;**78,118,127,225,275,388,MSC**;Jul 10, 19952 ;;8.0;KERNEL;**78,118,127,225,275,388,1508**;Jul 10, 1995
3 Q3 Q
4 ;4 ;
5CLOSE ;Close and reset5CLOSE ;Close and reset
@@ -69,8 +69,11 @@
69 U NIO S NIO("ZISTCP",0)=$KEY D LOG("Have port.")69 U NIO S NIO("ZISTCP",0)=$KEY D LOG("Have port.")
70 ;Start Listening70 ;Start Listening
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))
72 N ZC,ZR,IDX,DESC72 N ZC,ZR,IDX,DESC,LDESC
73 S ZC="ZSHOW ""D"":ZR"73 S ZC="ZSHOW ""D"":ZR"
74 X ZC
75 ; Find the listener file descriptor. The child must close it.
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'=""
74 ;Wait for connection77 ;Wait for connection
75LG2 S %A=0,EXIT=0 F D Q:%A!EXIT78LG2 S %A=0,EXIT=0 F D Q:%A!EXIT
76 . U NIO:(SOCKET="listener")79 . U NIO:(SOCKET="listener")
@@ -91,7 +94,7 @@
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'=""
92 I DESC="" D LOG("Can not find file descriptor!") G LG295 I DESC="" D LOG("Can not find file descriptor!") G LG2
93 ;spawn child process96 ;spawn child process
94 S SPAWNID=$&openvista.gtmserver(DESC,"GTMLNCH^%ZISTCPS")97 S SPAWNID=$&openvista.gtmserver2(DESC,LDESC,"GTMLNCH^%ZISTCPS")
95 L +^TMP("ZISTCPS",SPAWNID)98 L +^TMP("ZISTCPS",SPAWNID)
96 S ^TMP("ZISTCPS",SPAWNID)=RTN99 S ^TMP("ZISTCPS",SPAWNID)=RTN
97 L -^TMP("ZISTCPS",SPAWNID)100 L -^TMP("ZISTCPS",SPAWNID)
98101
=== modified file 'src/libopenvista/GTMSRV.m'
--- src/libopenvista/GTMSRV.m 2009-04-23 04:45:12 +0000
+++ src/libopenvista/GTMSRV.m 2010-12-04 06:46:54 +0000
@@ -26,15 +26,19 @@
26 Open TCPDEV:(ZLISTEN=PORTNO_":TCP":attach="listener"):TIMEOUT:"SOCKET"26 Open TCPDEV:(ZLISTEN=PORTNO_":TCP":attach="listener"):TIMEOUT:"SOCKET"
27 Use TCPDEV27 Use TCPDEV
28 Write /listen(1)28 Write /listen(1)
29 ZSHOW "D":ZS
30 N IDX,LDESC S LDESC="" F IDX=1:1:$O(ZS("D",""),-1) D Q:LDESC'=""
31 . S:ZS("D",IDX)["listener"&(ZS("D",IDX)["PORT="_PORTNO) LDESC=$P($P(ZS("D",IDX),"DESC=",2)," ",1)
32 . Q
29 F D33 F D
30 . Use TCPDEV:(SOCKET="listener")34 . Use TCPDEV:(SOCKET="listener")
31 . Write /wait(TIMEOUT)35 . Write /wait(TIMEOUT)
32 . N HANDLE S HANDLE=$P($KEY,"|",2)36 . N HANDLE S HANDLE=$P($KEY,"|",2)
33 . K ZS ZSHOW "D":ZS37 . K ZS ZSHOW "D":ZS
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'=""
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)
36 . . Q40 . . Q
37 . D &gtmserver(DESC,CMD)41 . D &gtmserver2(DESC,LDESC,CMD)
38 . C TCPDEV:(socket=HANDLE)42 . C TCPDEV:(socket=HANDLE)
39 . Q43 . Q
40 Q44 Q
4145
=== modified file 'src/libopenvista/gtmserver.c'
--- src/libopenvista/gtmserver.c 2009-04-23 04:45:12 +0000
+++ src/libopenvista/gtmserver.c 2010-12-04 06:46:54 +0000
@@ -37,18 +37,103 @@
37 ret_val = -1;37 ret_val = -1;
38 grandchild_id = -1;38 grandchild_id = -1;
3939
40 RETRY_EINTR(result=pipe(fds));40 fprintf(stderr, "$&openvista.gtmserver is deprecated; use $&openvista.gtmserver2 instead\n");
41 if (result<0) {41 fprintf(stderr, "OpenVista users can upgrade by installing XU*8.0*1508 and running ZTMGRSET\n\n");
42 perror("pipe()");42
43 return ret_val;43 RETRY_EINTR(result=pipe(fds));
44 }44 if (result<0) {
45 child_id=fork();45 perror("pipe()");
46 if (child_id<0) {46 return ret_val;
47 perror("child fork()");47 }
48 return ret_val;48 child_id=fork();
49 }49 if (child_id<0) {
50 if (child_id==0) {50 perror("child fork()");
51 /* In child */51 return ret_val;
52 }
53 if (child_id==0) {
54 /* In child */
55 RETRY_EINTR(result=close(fds[0]) );
56 if (result != 0) {
57 perror("child close()");
58 SEND_PID;
59 }
60 /*
61 * Fork again. Child exits and is reaped so as not to be a zombie.
62 * Grandchild will be the actual client, which will be reaped by init.
63 */
64 grandchild_id=fork();
65 if (grandchild_id<0) {
66 perror("grandchild fork()");
67 SEND_PID;
68 }
69 if (!grandchild_id) {
70 /* In grandchild */
71 RETRY_EINTR(dup2(connfd, STDIN_FILENO));
72 RETRY_EINTR(dup2(connfd, STDOUT_FILENO));
73 execlp("mumps", "mumps", "-run", cmd, (char*)0);
74 /* We should never get here */
75 perror("execlp() returned");
76 _exit(-1); /* Do not do atexit() callbacks */
77 } else {
78 /* Still in child. Send grandchild pid to parent. */
79 if (SEND_PID<0) {
80 perror("child write()");
81 _exit(-1);
82 }
83 if (close(fds[1]) != 0) {
84 perror("child close()");
85 }
86 RETRY_EINTR(sleep(1000)); /* parent will kill us */
87 _exit(0);
88 }
89 } else if (child_id) {
90 /* still in parent */
91 int bytes_read;
92 int status;
93 RETRY_EINTR(result=close(fds[1]));
94 if (result != 0) {
95 perror("parent close(fds[1])");
96 }
97 while( (bytes_read = read(fds[0], &ret_val, sizeof ret_val))==-1 && errno==EINTR) ;
98 //RETRY_EINTR(bytes_read = read(fds[0], &ret_val, sizeof ret_val));
99 if (bytes_read != sizeof ret_val) {
100 perror("incomplete read()");
101 /* ret_val = -1; */
102 }
103 RETRY_EINTR(result=close(fds[0]));
104 if (result != 0) {
105 perror("parent close(fds[0])");
106 }
107 kill(child_id, SIGKILL);
108 waitpid(child_id, &status, 0);
109 return ret_val;
110 }
111}
112
113xc_long_t gtmserver2(int count, int connfd, int listen_fd, const char *cmd) {
114 int fds[2];
115 int child_id;
116 int grandchild_id;
117 int ret_val;
118 int pid;
119 int result;
120
121 ret_val = -1;
122 grandchild_id = -1;
123
124 RETRY_EINTR(result=pipe(fds));
125 if (result<0) {
126 perror("pipe()");
127 return ret_val;
128 }
129 child_id=fork();
130 if (child_id<0) {
131 perror("child fork()");
132 return ret_val;
133 }
134 if (child_id==0) {
135 /* In child */
136 RETRY_EINTR(close(listen_fd));
52 RETRY_EINTR(result=close(fds[0]) );137 RETRY_EINTR(result=close(fds[0]) );
53 if (result != 0) {138 if (result != 0) {
54 perror("child close()");139 perror("child close()");
55140
=== modified file 'src/libopenvista/openvista.xc.in'
--- src/libopenvista/openvista.xc.in 2009-07-08 04:08:14 +0000
+++ src/libopenvista/openvista.xc.in 2010-12-04 06:46:54 +0000
@@ -1,2 +1,3 @@
1@GTM_DIST@/libopenvista.so1@GTM_DIST@/libopenvista.so
2gtmserver: xc_long_t gtmserver(I:xc_long_t, I:xc_char_t*)2gtmserver: xc_long_t gtmserver(I:xc_long_t, I:xc_char_t*)
3gtmserver2: xc_long_t gtmserver2(I:xc_long_t, I:xc_long_t, I:xc_char_t*)

Subscribers

People subscribed via source and target branches