Jump to content United States-English
HP.com Home Products and Services Support and Drivers Solutions How to Buy
» Contact HP
More options
HP.com home
HP-UX Event ManagerProgrammer's Guide: HP-UX 11i v3Edition 1 > Chapter 3 The EVM Programming Interface

Callback Functions

» 

Technical documentation

Complete book in PDF
» Feedback
Content starts here

 » Table of Contents

 » Index

EVM posting and subscribing clients connect to the EVM daemon using the EvmConnCreate() function call, and must specify one of three possible response modes: EvmRESPONSE_IGNORE, EvmRESPONSE_WAIT, or EvmRESPONSE_CALLBACK. For more information about modes, see EvmConnCreate(3).

The subscribing clients must specify EvmRESPONSE_CALLBACK as the response mode. The incoming events are passed to them by the callback function that you supply as the fourth argument to EvmConnCreate(). For an example of the usage of a callback function by a subscribing client, see “Subscribing Event Notifications”.

When working with a callback function, it is important to understand that your function is not called asynchronously, in the manner of a signal handler. Rather, your program must monitor the connection for input activity, using EvmConnWait() or select() or a related function, and then call EvmConnDispatch() to handle the activity. EvmConnDispatch() then reads an incoming message from the connection and invokes your callback function, if necessary. For a list of reasons for callback being invoked, see EvmCallback(5).

As with any function, the arguments passed to your callback function are passed on the program stack and are available only within the scope of the function. Therefore, to save values for use after you have returned from the callback, you must copy them to global memory space before returning.

If the callback is reporting an incoming event and you want to preserve the event instead of handling it and then destroying it within the callback, you can declare a globally accessible variable of type EvmEvent_t and assign the incoming event to it, for example:

 /* In global declarations */
EvmEvent_t SavedEvent;
...

/* In your callback function */
SavedEvent = cbdata->event;

In this case, you must not destroy the event in the callback function, because the assignment copies only the reference to the event, not the event body. You need to destroy the event from outside the callback function, after you have finished using the event; otherwise, you may encounter memory leak.

For information about assigning an event, see “Reassigning and Replicating EVM Events”.

Printable version
Privacy statement Using this site means you accept its terms Feedback to webmaster
© 2007 Hewlett-Packard Development Company, L.P.