On Thu, 23 Apr 2009 09:07:06 +0200 Kris Buelens said: >The DO QUEUED() is not required, there is only one stacked message for >an SMSG or IUCV event.
You are correct Kris. I just ran a test where I flooded my WAKEUP with 10 SMSGs in quick succession. Tey were all processed one at a time. But I am SURE that when I first wrote my WAKEUP routine I was losing SMSGs. Could it be because they were RC=1? I don't know when I added: 'CP SET SMSG IUCV' to cause RC=5 on SMSG. I do not use WAKEUP's FILE option. /Fran ------------------------------------------------------------------------ >If however you also use WAKEUP's FILE option, the WAKEUP file entry >that (could have) caused is **in all interrupt cases** stacked first >(before the entry of an SMSG for example). >If more SMSGs (or IUCVMSGs) were sent, CP or WAKEUP itself may have >queued some in their internal buffers while you handle the single one >placed in the CMS stack. > >Losing messages: we almost never lost messages. One exception: if you >send SMSG's to a server and the server issues a RACF or NETSTAT >command, all SMSGs queued by CP are "eaten" by the RACF/NETSTAT >command (both SMSG and RACF/NETSTAT use VMCF, which is limited to one >"path"). Solution: make WAKEUP handle the SMSGs via IUCV. From my >RxServer code: > WakeupOptions='IUCVMSG QUIET RDR' > /* To better co-exist with VMCF pgms like the RAC & NETSTAT command */ > /* we will set SMSG to IUCV so WAKEUP no longer uses VMCF */ > 'CP SET SMSG IUCV' /* ... grab SMSGs with WAKEUP's IUCV interface */ >An SMSG will then make WAKEUP exit with RC=5 instead of 1. > >I recommend you have a look at the SERVER KERNEL file in my RxServer >package; subroutines PROCESS:, GOT_a_MSG, and GOT_a_SMSG: are >important here. > >2009/4/23 Fran Hensler <f...@zvm.sru.edu> >> >> Jim - >> >> I found out the hard way that when WAKEUP gives you RC=5 that there >> may be more then one message to be processed. >> >> When I wrote this EXEC I assumed that there was only one message and >> every once in a while I would lose one. >> >> Here is part of an EXEC: >> >> 'CP SET SMSG IUCV' >> Do Forever >> 'WAKEUP (CONS IUCVMSG RDR ' >> Say 'Queued =' queued() ' Rc='Rc >> Select >> When RC = 1 then Call wakeup_smsg >> When RC = 2 Then Call wakeup_time >> When RC = 4 Then Call wakeup_rdr >> When RC = 5 Then Call wakeup_smsg >> When RC = 6 Then Call wakeup_cons >> Otherwise Say 'Unexpected RC='RC 'from WAKEUP.' >> End /* select */ >> End /* Do */ >> Exit >> >> {snip} >> >> >> wakeup_smsg: >> /* ================================================================== */ >> /* Process SMSG */ >> /* */ >> Say 'Smsg queued =' queued() >> Do m = 1 to queued() >> Call process_smsg >> End >> Return >> >> process_smsg: >> Parse Upper Pull message >> say message >> If Word(message,3) = 'LOGOFF' then 'CP LOGOFF' >> /* Do some processing */ >> Return >> >> /Fran Hensler at Slippery Rock University of Pennsylvania USA for 45 years >> mailto:f...@zvm.sru.edu http://zvm.sru.edu/~fjh +1.724.738.2153 >> "Yes, Virginia, there is a Slippery Rock" >> -------------------------------------------------------------------------- > > > >-- >Kris Buelens, >IBM Belgium, VM customer support