[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference azur::mcc

Title:DECmcc user notes file. Does not replace IPMT.
Notice:Use IPMT for problems. Newsletter location in note 6187
Moderator:TAEC::BEROUD
Created:Mon Aug 21 1989
Last Modified:Wed Jun 04 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:6497
Total number of notes:27359

1064.0. "ENABLE alarm rule and INVALID HANDLE STATE problem" by STKHLM::BERGGREN (Nils Berggren EIS/Project dpmt, Sweden DTN 876-8287) Wed May 29 1991 09:10

Hi,

I have some problem with my GETEVENT-routine.  
When I do a "GETEVENT MYMM ABCD ANY EVENTS" everything works fine.
If I do a "CREATE MCC 0 ALARMS RULE EV1
              EXPRESSION = ( OCCURS( MYMM ABCD ANY EVENTS) ) ..."
and then enable that rule it gets into enabled state and running substate
which is fine so far.  If I provide an event from an another process the
getevent-side gets it and everything looks fine but after looking at the
rule  "SHOW MCC 0 ALARMS RULE EV1 ALL ATTR" it shows 

                                   NAME = ev1
                           Disable Time = 29-MAY-1991 11:40:33.46
                        Error Condition = "%MCC-E-INV_HANDLE_STAT, software
                                          error: invalid handle state"
              Result of Last Evaluation = True
                                  State = Disabled
                               Substate = Disabled by error condition

When checking the state of the handle (mcc_ahs_get_state) just before 
returning it's set to MCC_K_HANDLE_FIRST.

Am I missing something?

Reply .1 is a log when having MCC_EVENT_LOG set to 1 and MCC_EVENT_TRACE to 180
  I'm not able to interpret all the outputs, can anyone help me.  What I don't
understand (among other things) is why it is in 
Event_Put Input Arguments  Dump of MCC Descriptor I get the 
   "%MCC-E-INV_HANDLE_STAT, software error: invalid handle state"


Reply .2 is a DEBUG-log when looking at the status-codes from every
routine in the calling-stack.  Interesting lines are marked with '->'

   /Nils


T.RTitleUserPersonal
Name
DateLines
1064.1EVENT_TRACE dumpSTKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Wed May 29 1991 09:12162
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		         dump of Event_Get and Event_Put
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
$ MANAGE/ENTER/DEBUG
DECmcc (V1.1.0)

MCC> enable mcc 0 alarms rule ev1

MCC 0 ALARMS RULE ev1 
AT 29-MAY-1991 12:20:55 

Tracing error paths in Event Manager
Tracing Event code path in GET
Tracing Event code path in PUT
Event_Put starting
Event_Put processing Partition argument
Event_Put Input Arguments ...
  p_ent_spec = 
        entity [0] wild = NOT_WILD class = 8 id = 0 type = 5
        instance = 
        entity [1] wild = NOT_WILD class = 5 id = 1 type = 4
        instance = ..ev1
        %X0103657631
  Partition = 15
  Event Code = 29
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 512
    mcc_w_curlen    = 40
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 29
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �..$."( occurs( mymm ABCD any events) ).
    %XBD820024952228206F636375727328206D796D6D204142434420616E79206576656E747329202900
    mcc_a_link      = MCC_K_NULL_PTR
  Timestamp =  29-MAY-1991 12:20:56.25
Event_Put getting current time
Event_Put converting user supplied time into BAT
Event_Put building an EDS structure to store Event Data
Event_Put creating an AHS
Event_Put Locking Subscriber structures
Event_Put Subscriber searching for first(/next) matching request
Event_Put Subscriber Handle state = MCC_K_HANDLE_FIRST
Event_Put Subscriber finished matching requests
Event_Put Unlocking Subscriber structures
Event_Put cleaning up
Event_Get starting
Event_Get processing Partition argument
Event_Get Input Arguments ...
  in_entity = 
        entity [0] wild = NOT_WILD class = 700 id = 1 type = 4
        instance = ..ABCD
        %X010441424344
  Partition = 15
  Filter = MCC_K_NULL_PTR
  time_spec = MCC_K_NULL_PTR
        Handle context not set up yet
Event_Get handle state = MCC_K_HANDLE_FIRST
Event_Get building a PRMB for this request
Event_Get creating a Heartbeat thread for this request
Event_Get setting the Heartbeat thread-id 1000C
Event_Get creating TimeStamps
Event_Get requesting NEXT event
Going to wait for the event now...


Normal operation has begun.


Event_Get was Signalled
Copying Event Data to user supplied buffers
Event_Get converting time to supplied time type
Event_Get deleting global event data
Event_Get performing general clean up
THUMP!
Failed to dequeue event:
%MCC-E-NOMOREVT, no more events in event queue
Event_Get Output Arguments ...
        Handle context not set up yet
  out_entity = 
        entity [0] wild = NOT_WILD class = 700 id = 1 type = 4
        instance = ..ABCD
        %X010441424344
  timestamp =  29-MAY-1991 12:21:06.22
  Event Code = 771
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 2048
    mcc_w_curlen    = 36
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 1
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �.. �...�.......JUST AN EVENT-REPORT
    %XA1820020A182001CBF860382001681144A55535420414E204556454E542D5245504F5254
    mcc_a_link      = MCC_K_NULL_PTR
Event_Get completed


Event_Put starting
Event_Put processing Partition argument
Event_Put Input Arguments ...
  p_ent_spec = 
        entity [0] wild = NOT_WILD class = 8 id = 0 type = 5
        instance = 
        entity [1] wild = NOT_WILD class = 5 id = 1 type = 4
        instance = ..ev1
        %X0103657631
  Partition = 16
  Event Code = 25
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 512
    mcc_w_curlen    = 146
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 25
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �...�..c�.._�.............�..........ABCD..testevent has occurred 29-MAY-1991 12:21:24.02..@.�...�.......<.."( occurs( mymm ABCD any events) )....
    %XB982008EBB820063A182005FA1820019A0820015810101820202BC8301018401048506010441424344822E746573746576656E7420686173206F636375727265642032392D4D41592D313939312031323A32313A32342E30328310401FC9859A1DCA01FFFFFFFFFFFF3C10952228206F636375727328206D796D6D204
    mcc_a_link      = MCC_K_NULL_PTR
  Timestamp =  29-MAY-1991 12:21:24.28
Event_Put getting current time
Event_Put converting user supplied time into BAT
Event_Put building an EDS structure to store Event Data
Event_Put creating an AHS
Event_Put Locking Subscriber structures
Event_Put Subscriber searching for first(/next) matching request
Event_Put Subscriber Handle state = MCC_K_HANDLE_FIRST
Event_Put Subscriber finished matching requests
Event_Put Unlocking Subscriber structures
Event_Put cleaning up
Event_Put starting
Event_Put processing Partition argument
Event_Put Input Arguments ...
  p_ent_spec = 
        entity [0] wild = NOT_WILD class = 8 id = 0 type = 5
        instance = 
        entity [1] wild = NOT_WILD class = 5 id = 1 type = 4
        instance = ..ev1
        %X0103657631
  Partition = 15
  Event Code = 30
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 512
    mcc_w_curlen    = 105
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 30
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �..e."( occurs( mymm ABCD any events) ).....<%MCC-E-INV_HANDLE_STAT, software error: invalid handle state
    %XBE820065952228206F636375727328206D796D6D204142434420616E79206576656E747329202900960101973C254D43432D452D494E565F48414E444C455F535441542C20736F667477617265206572726F723A20696E76616C69642068616E646C65207374617465
    mcc_a_link      = MCC_K_NULL_PTR
  Timestamp =  
Event_Put getting current time
Event_Put converting user supplied time into BAT
1064.2debug-logSTKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Wed May 29 1991 09:13244
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
		         log from DEBUG
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-> !!
-> !! get state of the handle just before returning from the
-> !! GETEVENT-directive entry-point
-> !!
   examine handle
   !MCC_MYMM__GETEVENT\mcc_MYMM__getevent\handle:   3131644
   eval/addre status
   !2377028
   set image mcc_kernel_shr
   set modu/all
   call mcc_ahs_get_state(3131644, 2377028)
   !value returned is 52854793
   !%DEBUG-I-DYNIMGSET, setting image MCC_MYMM_AM
   eval/condition 52854793
   !%MCC-S-NORMAL, normal successful completion
-> !!
-> !! NO problem getting handle state 
-> !!
   examine status
   !MCC_MYMM__GETEVENT\mcc_MYMM__getevent\status:   0
-> !!
-> !! OK, handle-state is MCC_K_HANDLE_FIRST
-> !!                     ^^^^^^^^^^^^^^^^^^

-> !!
-> !! SHOW CALL STACK
-> !!
   show calls
   ! module name     routine name                line       rel PC    abs PC
   ! SHARE$MCC_MYMM_AM					00000000  004E2E5C
   !*MCC_DISPATCH    im__dispatch                3266      00000147  0010492F
   !*MCC_IM          im__call_dispatch           5971      00000373  000B372B
   !*MCC_IM          im__call_selector           5415      000000A3  000B32FF
   !*MCC_IM          im__call_schedule           5235      00000349  000B3255
   !*MCC_IM          im__call_first              4535      000002CF  000B2CDB
   !*MCC_IM          im__call_switch             3976      000000B5  000B2789
   !*MCC_IM          mcc_call_access             3632      00000216  000B243A
   ! SHARE$MCC_CONTROL_FM				   00000000  004DD353
   !*MCC_DISPATCH    im__dispatch                3266      00000147  0010492F
   !*MCC_IM          im__call_dispatch           5971      00000373  000B372B
   !*MCC_IM          im__call_selector           5415      000000A3  000B32FF
   !*MCC_IM          im__call_schedule           5235      00000349  000B3255
   !*MCC_IM          im__call_first              4535      000002CF  000B2CDB
   !*MCC_IM          im__call_switch             3976      000000B5  000B2789
   !*MCC_IM          mcc_call_function           3844      0000021E  000B2696
   ! SHARE$MCC_ALARMS_FM				   00000000  00412681
   ! SHARE$MCC_ALARMS_FM				   00000000  00411ABE
   ! SHARE$MCC_ALARMS_FM				   00000000  00414DEC
   ! SHARE$MCC_ALARMS_FM				   00000000  00413F60
   ! SHARE$MCC_ALARMS_FM				   00000000  00414D58
   ! SHARE$MCC_ALARMS_FM				   00000000  00413FF4
   ! SHARE$MCC_ALARMS_FM				   00000000  0040A6D0
   ! SHARE$MCC_ALARMS_FM				   00000000  0040A0B8
   !*MCC_DISPATCH    im__dispatch                3266      00000147  0010492F
   !*MCC_IM          im__call_dispatch           5971      00000373  000B372B
   !*MCC_IM          im__call_selector           5415      000000A3  000B32FF
   !*MCC_IM          im__call_schedule           5235      00000349  000B3255
   !*MCC_IM          im__call_first              4535      000002CF  000B2CDB
   !*MCC_IM          im__call_switch             3976      000000B5  000B2789
   !*MCC_IM          mcc_call_function           3844      0000021E  000B2696
   ! SHARE$MCC_ALARMS_FM				   00000000  0040B9DA
   ! SHARE$MCC_ALARMS_FM				   00000000  0040B894
   ! SHARE$MCC_ALARMS_FM				   00000000  0040B310
   !*MCC_MTS_THREADS TRY_THREAD                  2335      00000012  00153D39
   !*MCC_MTS_THREADS MTS_THREAD_SHELL            2394      00000089  00153DD5
   !*MCC_MTS_THREADS MCC_THREAD_CREATE            213      00000002  001511D6
   ! SHARE$MCC_MAIN                                        00000000  000057C6
   
-> !!
-> !!  successive   'STEP/RETURN; EXAMINE/CONDITION  R0'
-> !!  with some editing on the output to make it more readable
-> !!

   !%DEBUG-I-DYNIMGSET, setting image MCC_MYMM_AM
   !stepped on return from MCC_MYMM__GETEVENT\mcc_MYMM__getevent\%LINE 3129 
   		     to MCC_MYMM__GETEVENT\mcc_MYMM__getevent\%LINE 3129+5
   !MCC_MYMM__GETEVENT\mcc_MYMM__getevent\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !%DEBUG-I-DYNIMGSET, setting image MCC_KERNEL_SHR
   !stepped on return from SHARE$MCC_MYMM_AM+8801 
   		     to MCC_DISPATCH\im__dispatch\%LINE 3275
   !MCC_DISPATCH\im__dispatch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_DISPATCH\im__dispatch\%LINE 3275 
   		     to MCC_IM\im__call_dispatch\%LINE 6019+3
   !MCC_IM\im__call_dispatch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_dispatch\%LINE 6019+3 
   		     to MCC_IM\im__call_selector\%LINE 5504+3
   !MCC_IM\im__call_selector\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_selector\%LINE 5504+3 
   		     to MCC_IM\im__call_schedule\%LINE 5270+3
   !MCC_IM\im__call_schedule\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_schedule\%LINE 5270+3 
   		     to MCC_IM\im__call_first\%LINE 4618+3
   !MCC_IM\im__call_first\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_first\%LINE 4618+3 
   		     to MCC_IM\im__call_switch\%LINE 4068+3
   !MCC_IM\im__call_switch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_switch\%LINE 4068+3 
   		     to MCC_IM\mcc_call_access\%LINE 3643+3
   !MCC_IM\mcc_call_access\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\mcc_call_access\%LINE 3643+3 
   		     to SHARE$MCC_CONTROL_FM+851
   !0\%R0:			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from SHARE$MCC_CONTROL_FM+851 
   		     to MCC_DISPATCH\im__dispatch\%LINE 3275
   !MCC_DISPATCH\im__dispatch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_DISPATCH\im__dispatch\%LINE 3275 
   		     to MCC_IM\im__call_dispatch\%LINE 6019+3
   !MCC_IM\im__call_dispatch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_dispatch\%LINE 6019+3 
   		     to MCC_IM\im__call_selector\%LINE 5504+3
   !MCC_IM\im__call_selector\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_selector\%LINE 5504+3 
   		     to MCC_IM\im__call_schedule\%LINE 5270+3
   !MCC_IM\im__call_schedule\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_schedule\%LINE 5270+3 
   		     to MCC_IM\im__call_first\%LINE 4618+3
   !MCC_IM\im__call_first\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_first\%LINE 4618+3 
   		     to MCC_IM\im__call_switch\%LINE 4068+3
   !MCC_IM\im__call_switch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_switch\%LINE 4068+3 
   		     to MCC_IM\mcc_call_function\%LINE 3855+3
   !MCC_IM\mcc_call_function\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\mcc_call_function\%LINE 3855+3 
   		     to SHARE$MCC_ALARMS_FM+102348
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+102348 
   		     to SHARE$MCC_ALARMS_FM+99129
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+99129 
   		     to SHARE$MCC_ALARMS_FM+112161
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+112161 
   		     to SHARE$MCC_ALARMS_FM+108390
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+108390 
   		     to SHARE$MCC_ALARMS_FM+112001
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+112001 
   		     to SHARE$MCC_ALARMS_FM+108561
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+108561 
   		     to SHARE$MCC_ALARMS_FM+69947
   !0\%R0:			%MCC-S-NORMAL, normal successful completion
   
   !stepped on return from SHARE$MCC_ALARMS_FM+69947 
   		     to SHARE$MCC_ALARMS_FM+67792
   !0\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from SHARE$MCC_ALARMS_FM+67792 
   		     to MCC_DISPATCH\im__dispatch\%LINE 3275
   !MCC_DISPATCH\im__dispatch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_DISPATCH\im__dispatch\%LINE 3275 
   		     to MCC_IM\im__call_dispatch\%LINE 6019+3
   !MCC_IM\im__call_dispatch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_dispatch\%LINE 6019+3 
   		     to MCC_IM\im__call_selector\%LINE 5504+3
   !MCC_IM\im__call_selector\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_selector\%LINE 5504+3 
   		     to MCC_IM\im__call_schedule\%LINE 5270+3
   !MCC_IM\im__call_schedule\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_schedule\%LINE 5270+3 
   		     to MCC_IM\im__call_first\%LINE 4618+3
   !MCC_IM\im__call_first\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_first\%LINE 4618+3 
   		     to MCC_IM\im__call_switch\%LINE 4068+3
   !MCC_IM\im__call_switch\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
   !stepped on return from MCC_IM\im__call_switch\%LINE 4068+3 
   		     to MCC_IM\mcc_call_function\%LINE 3855+3
   !MCC_IM\mcc_call_function\%R0:
   			%MCC-S-RESPONSE, success with response reply
   
-> !!
-> !! NOW TO THE RESULT I DON'T UNDERSTAND
-> !!
   
   !stepped on return from MCC_IM\mcc_call_function\%LINE 3855+3 
   		     to SHARE$MCC_ALARMS_FM+74506
   !0\%R0:     %MCC-E-INV_HANDLE_STAT, software error: invalid handle state
-> !!          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-> !! WHO IS RESPONSIBLE FOR THIS ONE, IS IT ME OR...????
-> !!
   sho call
   ! module name     routine name                line       rel PC    abs PC
   ! SHARE$MCC_ALARMS_FM				    00000000  0040BB0A
   ! SHARE$MCC_ALARMS_FM				    00000000  0040B894
   ! SHARE$MCC_ALARMS_FM				    00000000  0040B310
   !*MCC_MTS_THREADS TRY_THREAD                   2335      00000012  00153D39
   !*MCC_MTS_THREADS MTS_THREAD_SHELL             2394      00000089  00153DD5
   !*MCC_MTS_THREADS MCC_THREAD_CREATE             213      00000002  001511D6
   ! SHARE$MCC_MAIN                                         00000000  000057C6
1064.3Where did you get the time_spec argument?TOOK::GUERTINI do this for a living -- reallyWed May 29 1991 09:535
    How did you get the "time_spec" argument?  Did you just pass into the
    mcc_event_get() routine the same time_spec argument that you received
    through the MCC Call, or did you build your own (or pass in null)?
    
    -Matt.
1064.4same time_spec as in the MCC CallSTKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Wed May 29 1991 13:079
repl .3
    >>> How did you get the "time_spec" argument?  Did you just pass into the
    >>> mcc_event_get() routine the same time_spec argument that you received
    >>> through the MCC Call,
    
    
    Yes, that's the way. 
    I bypassed the validation of the time_spec by setting the
    valid_time_spec -field to 0.
1064.5Sorry, that is MCC_K_NULL_PTR as time_spec!STKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Wed May 29 1991 13:276
    repl .4
    
    SORRY!  
    I was wrong in .4;  I pass MCC_K_NULL_PTR as the time_spec argument.
    
       /Nils
1064.6Well then, try it the other way!TOOK::GUERTINI do this for a living -- reallyWed May 29 1991 16:391
    
1064.7the other way makes no differenceSTKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Thu May 30 1991 10:145
    repl .6
    
    So I did and it makes no difference.
    
       /Nils
1064.8I think that should have worked.TOOK::GUERTINI do this for a living -- reallyThu May 30 1991 10:436
    Did you look at the Event Manager trace log when you passed the same
    time_spec argument down to the mcc_event_get() and could you post the
    Event Manager trace log here?  Also, what "handle" argument are you
    using?  Your own or the one passed in thru the MCC Call interface?
    
    -Matt.
1064.9try thisTOOK::CALLANDERJill Callander DTN 226-5316Thu May 30 1991 13:5414
could you please try the getevent with a FOR clause on it from the FCL?
This will help to see if the multi transaction handle usage is correct
without having to go through alarms. By simply entering a getevent
without the FOR clause you are not doing what alarms does when it
calls you. 

As to the handle of first, could you also check something there for me as well.
Check to see what handle you are passing into the event manager, is this 
the same one you are trying to return to the alarms FM? If so is it the
one that was passed in? The IM on a callback is very sensitive to the
address of the call arguments (you can not return a different one then
the one originally passed in, or things will fail unpredictably).

jill
1064.10log from GETEVENT ... ,FOR ...STKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Fri May 31 1991 05:5965
repl .9 

log from getevent with for-clause

DECmcc (V1.1.0)

MCC> getevent mymm ABCD any event, for start +00:00:01

Tracing error paths in Event Manager
Tracing Event code path in GET
Tracing Event code path in PUT
Event_Get starting
Event_Get processing Partition argument
Event_Get Input Arguments ...
  in_entity = 
        entity [0] wild = NOT_WILD class = 700 id = 1 type = 4
        instance = ..ABCD
        %X010441424344
  Partition = 15
  Filter = MCC_K_NULL_PTR
  time_spec = MCC_K_NULL_PTR
        Handle context not set up yet
Event_Get handle state = MCC_K_HANDLE_FIRST
Event_Get building a PRMB for this request
Event_Get creating a Heartbeat thread for this request
Event_Get setting the Heartbeat thread-id 1000A
Event_Get creating TimeStamps
Event_Get requesting NEXT event
Going to wait for the event now...
Event_Get was Signalled
Copying Event Data to user supplied buffers
Event_Get converting time to supplied time type
Event_Get deleting global event data
Event_Get performing general clean up
THUMP!
Failed to dequeue event:
%MCC-E-NOMOREVT, no more events in event queue
Event_Get Output Arguments ...
        Handle context not set up yet
  out_entity = 
        entity [0] wild = NOT_WILD class = 700 id = 1 type = 4
        instance = ..ABCD
        %X010441424344
  timestamp =  31-MAY-1991 09:29:59.88
  Event Code = 771
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 1024
    mcc_w_curlen    = 36
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 1
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �.. �...�.......JUST AN EVENT-REPORT
    %XA1820020A182001CBF860382001681144A55535420414E204556454E542D5245504F5254
    mcc_a_link      = MCC_K_NULL_PTR
Event_Get completed

MYMM ABCD 
AT 31-MAY-1991 09:30:03 Any Event

Nu kom ett MYMM event                   ! swedish and means here's an event
%MCC-E-NOENTITY,  no corresponding entity instance exists 

1064.11log with same time_specSTKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Fri May 31 1991 06:00191
repl .8

here's a log when I pass the same time_spec in to the event_get-routine
as I get in the MCC_CALL.


DECmcc (V1.1.0)

MCC> enable mcc 0 alarm rule ev1

MCC 0 ALARMS RULE ev1 
AT 31-MAY-1991 10:24:21 

Tracing error paths in Event Manager
Tracing Event code path in GET
Tracing Event code path in PUT
Event_Put starting
Event_Put processing Partition argument
Event_Put Input Arguments ...
  p_ent_spec = 
        entity [0] wild = NOT_WILD class = 8 id = 0 type = 5
        instance = 
        entity [1] wild = NOT_WILD class = 5 id = 1 type = 4
        instance = ..ev1
        %X0103657631
  Partition = 15
  Event Code = 29
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 512
    mcc_w_curlen    = 37
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 29
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �..!..(occurs(mymm ABCD any events)).
    %XBD820021951F286F6363757273286D796D6D204142434420616E79206576656E7473292900
    mcc_a_link      = MCC_K_NULL_PTR
  Timestamp =  31-MAY-1991 10:24:21.53
Event_Put getting current time
Event_Put converting user supplied time into BAT
Event_Put building an EDS structure to store Event Data
Event_Put creating an AHS
Event_Put Locking Subscriber structures
Event_Put Subscriber searching for first(/next) matching request
Event_Put Subscriber Handle state = MCC_K_HANDLE_FIRST
Event_Put Subscriber finished matching requests
Event_Put Unlocking Subscriber structures
Event_Put cleaning up
Event_Get starting
Event_Get processing Partition argument
Event_Get Input Arguments ...
  in_entity = 
        entity [0] wild = NOT_WILD class = 700 id = 1 type = 4
        instance = ..ABCD
        %X010441424344
  Partition = 15
  Filter = MCC_K_NULL_PTR
  time_spec = 
time frame at 2a74a0 hex
schedule
   is NULL
scope
   contains 1 elements
   element 0
      begin is ABSOLUTE: 31-MAY-1991 10:24:23.16 
      end is ABSOLUTE: 17-DEC-1991 10:24:23.16 
      periodicity is NULL
      period_end is NULL
        Handle context not set up yet
Event_Get handle state = MCC_K_HANDLE_FIRST
Event_Get building a PRMB for this request
Event_Get creating a Heartbeat thread for this request
Event_Get setting the Heartbeat thread-id 1000C
Event_Get creating TimeStamps
Event_Get creating a Maintainer thread for this request
Waiting until -> 31-MAY-1991 10:24:25.18
Start_time = 31-MAY-1991 10:24:23.16
End_time   = 17-DEC-1991 10:24:23.16

FINAL wait time -> 17-DEC-1991 10:24:23.16
Event_Get setting Maintainer thread-id 1000E
Event_Get setting Handle state to MCC_K_HANDLE_MORE
Going to wait for the event now...
Event_Get was Signalled
Copying Event Data to user supplied buffers
Event_Get converting time to supplied time type
Event_Get deleting global event data
Event_Get performing general clean up
Event_Get Output Arguments ...
        Context Ident = 135ACE
        Next RMB = 0, Prev RMB = 42C670
        PRB List = 42C8F0, HEAD_EDQ = 42C810
        SOI start = 31-MAY-1991 10:24:23.16
        SOI end = 17-DEC-1991 10:24:23.16
        TIME_STAMP = 31-MAY-1991 09:24:25.29
        Heartbeat Thrid = 0, Timeout Thrid = 0
        FLAGS: Frozen = 0, Delete = 0, Next = 0
  out_entity = 
        entity [0] wild = NOT_WILD class = 700 id = 1 type = 4
        instance = ..ABCD
        %X010441424344
  timestamp =  31-MAY-1991 10:24:43.07
  Event Code = 771
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 2048
    mcc_w_curlen    = 36
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 1
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �.. �...�.......JUST AN EVENT-REPORT
    %XA1820020A182001CBF860382001681144A55535420414E204556454E542D5245504F5254
    mcc_a_link      = MCC_K_NULL_PTR
Event_Get completed
Event_Put starting
Event_Put processing Partition argument
Event_Put Input Arguments ...
  p_ent_spec = 
        entity [0] wild = NOT_WILD class = 8 id = 0 type = 5
        instance = 
        entity [1] wild = NOT_WILD class = 5 id = 1 type = 4
        instance = ..ev1
        %X0103657631
  Partition = 16
  Event Code = 26
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 512
    mcc_w_curlen    = 182
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 26
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �..��...�...�.............�..........ABCD.X%MCC-E-INV_HANDLE_STAT, software error: invalid handle state, The rule has been disabled...�l...�.......<...(occurs(mymm ABCD any events)).
    %XBA8200B2BB82008DA1820089A1820019A0820015810101820202BC83010184010485060104414243448258254D43432D452D494E565F48414E444C455F535441542C20736F667477617265206572726F723A20696E76616C69642068616E646C652073746174652C205468652072756C6520686173206265656E2064697361626C65648310A0D46C8F1C1FCA01FFFFFFFFFFFF3C10951F286F6363757273286D796D6D204142434420616E79206576656E7473292900
    mcc_a_link      = MCC_K_NULL_PTR
  Timestamp =  31-MAY-1991 10:24:45.93
Event_Put getting current time
Event_Put converting user supplied time into BAT
Event_Put building an EDS structure to store Event Data
Event_Put creating an AHS
Event_Put Locking Subscriber structures
Event_Put Subscriber searching for first(/next) matching request
Event_Put Subscriber Handle state = MCC_K_HANDLE_FIRST
Event_Put Subscriber finished matching requests
Event_Put Unlocking Subscriber structures
Event_Put cleaning up
Event_Put starting
Event_Put processing Partition argument
Event_Put Input Arguments ...
  p_ent_spec = 
        entity [0] wild = NOT_WILD class = 8 id = 0 type = 5
        instance = 
        entity [1] wild = NOT_WILD class = 5 id = 1 type = 4
        instance = ..ev1
        %X0103657631
  Partition = 15
  Event Code = 30
  Event Data = 

Dump of MCC Descriptor reveals:
    mcc_w_maxstrlen = 512
    mcc_w_curlen    = 131
    mcc_b_flags     = 0
    mcc_b_ver       = 1
    mcc_l_id        = 30
    mcc_l_dt        = MCC_K_DT_ILV
    mcc_a_pointer   = �.....(occurs(mymm ABCD any events)).....Y%MCC-E-INV_HANDLE_STAT, software error: invalid handle state, The rule has been disabled.
    %XBE82007F951F286F6363757273286D796D6D204142434420616E79206576656E74732929009601019759254D43432D452D494E565F48414E444C455F535441542C20736F667477617265206572726F723A20696E76616C69642068616E646C652073746174652C205468652072756C6520686173206265656E2064697361626C656400
    mcc_a_link      = MCC_K_NULL_PTR
  Timestamp =  31-MAY-1991 10:24:45.93
Event_Put getting current time
Event_Put converting user supplied time into BAT
Event_Put building an EDS structure to store Event Data
Event_Put creating an AHS
Event_Put Locking Subscriber structures
Event_Put Subscriber searching for first(/next) matching request
Event_Put Subscriber Handle state = MCC_K_HANDLE_FIRST
Event_Put Subscriber finished matching requests
Event_Put Unlocking Subscriber structures
Event_Put cleaning up

MCC>  exit
THUMP!
THUMP!Maintainer Thread was alerted during Timer Wait:
%MCC-E-ALERT_TERMREQ, thread termination requested
1064.12using own handle in event_get-callSTKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Fri May 31 1991 06:0374
repl .8 and .9

>>> Also, what "handle" argument are you using?  
>>> Your own or the one passed in thru the MCC Call interface?


>>> Check to see what handle you are passing into the event manager, is this 
>>> the same one you are trying to return to the alarms FM? If so is it the
>>> one that was passed in? The IM on a callback is very sensitive to the
>>> address of the call arguments (you can not return a different one then
>>> the one originally passed in, or things will fail unpredictably).

I only check the state on the handle passed in to the 
getevent_directive routine.  Then I create a new handle 
which is passed into the eventmanager and deleted afterwards
in the end_directive-part.

this is what I do in pseudocode
===================================
mcc_MYMM__getevent(verb, in_entity, attribute, 
 		   time_spec,in_q, in_p, handle, 
		   out_entity, time_stamp, out_p, out_q)
{

    begin_directive(&call_args, &p_context);
    do_directive(&call_args, &p_context);
    cvr = end_directive(&call_args, &p_context, &status);
    return(cvr);
}

begin_directive(p_callargs, p_context) 
{
    get state of handle;
    if  MCC_K_HANDLE_FIRST   init_handle_first(p_callargs, p_context); 
    else
    ...
}

init_handle_first(p_callargs, p_context)
{
   init alloc list;
   validate callargs;   /* don't validate time_spec */
   mcc_ahs_create( &(*p_context)->event_handle  );
}

do_directive(p_callargs, p_context)
{
    status = mcc_event_get(
		p_callargs->p_in_entity,	  /* Event Entity       */
		&MCC_K_PRT_CONFIGURATION_EVENTS,  /* event_partition    */
		MCC_K_NULL_PTR,			  /* Event filter wild  */
                MCC_K_NULL_PTR, 		  /* time spec		*/
		(*p_context)->event_handle,	  /* handle		*/
		p_callargs->p_out_entity,	  /* out_entity		*/
		p_callargs->p_time_stamp,	  /* time stamp		*/
		&(*p_context)->event_code,	  /* event code		*/
		p_callargs->p_out_p);		  /* event data		*/
   ....
}

end_directive(p_callargs, p_context, p_status)
{
    ...
    mcc_desframe_set_cvr_and_reply(p_callargs, p_context, &cvr)
    update_call_handle(p_callargs, p_context);
}

update_call_handle(p_callargs, p_context)
{
    mcc_desframe_free_alloc_list(*p_context);
    mcc_ahs_delete( &(*p_context)->event_handle );
    mcc_free(*p_context);
}

1064.13Doesn't agree with what is in the SRMTOOK::GUERTINI do this for a living -- reallyFri May 31 1991 10:555
    It doesn't sound like you are following the handle protocol for the
    MCC call interface, AHS, and Event Manager.  There are several problems
    with your algorithm.
    
    -Matt.
1064.142 ideas... The first...PHONE::ALLAINFri May 31 1991 11:3038
Re: .12

My code looks like yours and it works fine.

The first thing is:

I had a problem with the p_callargs->p_out_p argument for the mcc_event_get.
This p_out_p is gonna be build by the call to mcc_desframe_set_cvr_and_reply.
I use another descriptor for this argument, and then, in my .h file I got 
something like this: 


static
        dt_reply_arg_list
                ReplyArg_event_data [] = {
                        offsetof(dt__LocalContext,ReplyArg_event_report),
                        MCC_K_ARG_EVENT_REPORT,
                        REPLY_K_END_OF_ARG_LIST
                        };

static dt_reply_table ReplyTable[] = {
/*  1 */  MCC_S_RESPONSE,
          MCC_K_EVENT_RECEIVED,
          &ReplyArg_event_data,


where ReplyArg_event_report is the descriptor I'm using for the event report
in teh mcc_event_get.

Then the call to mcc_desframe_set_cvr_and_reply will build from the .H file
the p_out_p.

You may wanna check the status returned by this mcc_desframe_set_cvr_and_reply
in your code, you'll see the problem.

Second idea in the next reply...

Francois
1064.15... the second idea...PHONE::ALLAINFri May 31 1991 11:3211
At the end of my do_directive in the getevent stuff, I have this:


uw_status = mcc_ahs_get_state ( (*p_context)->event_handle, &state);
if (GOOD(uw_status) && (state == MCC_K_HANDLE_MORE))
        (*p_context)->flags.more_data = TRUE;

Try it


Francois
1064.16Looks like an illegal response from the Service ProviderTOOK::GUERTINI do this for a living -- reallyFri May 31 1991 16:1124
    RE:.12, etc.
    
    The "time_spec" and "handle" are tightly coupled in an MCC Call for the
    GETEVENT verb.  If the "time_spec" specifies a scope of interest, then
    the Client can only have one of four possible returns:
    
       o  Response of MCC_K_GETEVENT_NOMORE - which means the Service Provider
          got back MCC_S_NOEVENTREC from the Event Manager.  And the Handle
          state is *always* FIRST.
    
       o  Response of MCC_K_GETEVENT_SUCCESS - which means that the Service
          Provider is returning an Event Report.  And the Handle state is
          *always* MORE.
    
       o  A specialized exception for some miscellaneous problem.
    
       o  A CVR for some miscellaneous MCC Call error.
    
    
    It would appear as though you are returning a Handle state of FIRST
    with a Response of an Event Report.  As you can see from above, that is
    an illegal combination for a time_spec with a scope of interest.
    
    -Matt.
1064.17sorry about that, need a durationTOOK::CALLANDERJill Callander DTN 226-5316Fri May 31 1991 16:187
Sorry, I should have been clearer. I wanted you to try it with 
a for duration on it so that we could see it call back to your
xM after returning the first event. Do this with the MCC_FCL_PM_LOG
set to 8.

thanks
(sorry for the inconvenience)
1064.18Q: Who can return an Invalid Handle State ?NANOVX::ROBERTSKeith Roberts - DECmcc Toolkit TeamFri May 31 1991 17:1830
Jill is quite correct about how alarms calls you get-event directive,
that is to command would be:

	getevent <entity> any <partition> event, for duration 200-00:00:00

The duration of 200 days is said to be 'forever' and is currently a v1.1
limitation.

When *your* getevent directive calls the event manager with the time-spec
as passed down from the Alarms code (ie, the for duration 200 days), the
event manager will return your event data ... and A HANDLE OF MORE

Like "a few notes back" said, you have to check the value of the event
handle (ahs_get_state) and set the 'more-data' flag is the event handle
is MORE.  Then finish packaging up your event report, and Alarms will
call you back -- you keep doing this until the event manager returns
a handle of done .. at which time you can delete the handle.

You cannot delete a Handle with a state of MORE -- it must have a state
of FIRST.  I imagine this is where the bad status is coming from.

Your Getevent directive must support Call Handle = Cancel  ... you then
would set the handle to cancel and call the event manager (event_get).  This
tells the event manager to clean up memory allocations and data requests.
it then returns MCC_S_CANCELED.

Hope I made some sense, and this helps.

Keith Roberts
DECmcc Toolkit Team
1064.19Works now, THANK YOU ALL!STKHLM::BERGGRENNils Berggren EIS/Project dpmt, Sweden DTN 876-8287Thu Jun 06 1991 10:028
    repl to all of you who helped me.
    
    Soory for not replying earlier, but I was gone.  Alot of the replies
    made sence to me so now, finaly, I got it to work (with some other
    problems, couldn't you tell...:-),  but I'll be back about them later).
    
    Thanks alot
        /Nils