iofunc_unblock_default()

Default unblock handler

Synopsis:

#include <sys/iofunc.h>

int iofunc_unblock_default( resmgr_context_t * ctp,
                            io_pulse_t * msg,
                            iofunc_ocb_t * ocb );

Arguments:

ctp
A pointer to a resmgr_context_t structure that the resource-manager library uses to pass context information between functions.
msg
A pointer to the io_pulse_t structure that describes the pulse that the resource manager received.
ocb
A pointer to the iofunc_ocb_t structure for the Open Control Block that was created when the client opened the resource.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The iofunc_unblock_default() function is the default routine that a resource manager calls when a client requests to be unblocked (e.g., because of a signal or timeout). It unblocks any clients that are blocked on any internal resource manager structures, calling iofunc_unblock() to do the actual work.

Note: If your resource manager uses iofunc_lock_default(), you must use both iofunc_unblock_default() and iofunc_close_dup_default() in their respective handlers, as they provide necessary ancillary functionality for managing file locks. This is because file locks are owned by the process, and aren't inherited by the child process.

You can place this function directly into the resmgr_io_funcs_t table passed as the io_funcs argument to resmgr_attach(), at the unblock position, or you can call iofunc_func_init() to initialize all of the functions to their default values.

The unblock message is synthesized by the resource-manager shared library when a client wishes to unblock from its MsgSendv() to the resource manager. The iofunc_unblock_default() function takes care of freeing up any locks that the client may have placed on the resource.

Returns:

_RESMGR_DEFAULT
No client connection was found.
_RESMGR_NOREPLY
A client connection has been unblocked.

Examples:

If your lock handler called iofunc_lock_default(), your unblock handler must call iofunc_unblock_default():

int my_unblock_handler (resmgr_context_t *ctp, io_pulse_t *msg, RESMGR_OCB_T *ocb)
{
   int status;

   if((status = iofunc_unblock_default(...)) != _RESMGR_DEFAULT)
   {
      return status;
   }

   /* Do any additional work required to look for a client to unblock. */
   ...
}

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes