ondestroy.h File Reference

#include <isc/lang.h>
#include <isc/types.h>

Go to the source code of this file.

Data Structures

struct  isc_ondestroy

Defines

#define ISC_ONDESTROY_H   1

Functions

void isc_ondestroy_init (isc_ondestroy_t *ondest)
 Initialize the on ondest structure. *must* be called before first call to isc_ondestroy_register().
isc_result_t isc_ondestroy_register (isc_ondestroy_t *ondest, isc_task_t *task, isc_event_t **eventp)
 Stores task and *eventp away inside *ondest. Ownership of **event is taken from the caller (and *eventp is set to NULL). The task is attached to.
void isc_ondestroy_notify (isc_ondestroy_t *ondest, void *sender)
 Dispatches the event(s) to the task(s) that were given in isc_ondestroy_register call(s) (done via calls to isc_task_sendanddetach()). Before dispatch, the sender value of each event structure is set to the value of the sender paramater. The internal structures of the ondest parameter are cleaned out, so no other cleanup is needed.


Detailed Description

ondestroy handling.

Any class ``X'' of objects that wants to send out notifications on its destruction should declare a field of type isc_ondestroy_t (call it 'ondest').

        typedef struct {
                ...
                isc_ondestroy_t ondest;
                ...
        } X;

When an object ``A'' of type X is created it must initialize the field ondest with a call to

        isc_ondestroy_init(&A->ondest).

X should also provide a registration function for third-party objects to call to register their interest in being told about the destruction of a particular instance of X.

        isc_result_t
        X_ondestroy(X *instance, isc_task_t *task,
                     isc_event_t **eventp) {
                return(isc_ondestroy_register(&instance->ondest, task,eventp));
        }

Note: locking of the ondestory structure embedded inside of X, is X's responsibility.

When an instance of X is destroyed, a call to isc_ondestroy_notify() sends the notifications:

        X *instance;
        isc_ondestroy_t ondest = instance->ondest;

        ... completely cleanup 'instance' here...

        isc_ondestroy_notify(&ondest, instance);

see lib/dns/zone.c for an ifdef'd-out example.

Definition in file ondestroy.h.


Define Documentation

#define ISC_ONDESTROY_H   1

Definition at line 21 of file ondestroy.h.


Function Documentation

void isc_ondestroy_init ( isc_ondestroy_t ondest  ) 

Initialize the on ondest structure. *must* be called before first call to isc_ondestroy_register().

Definition at line 36 of file ondestroy.c.

References isc_ondestroy::events, ISC_LIST_INIT, isc_ondestroy::magic, and ONDESTROY_MAGIC.

Referenced by dns_rbtdb_create().

isc_result_t isc_ondestroy_register ( isc_ondestroy_t ondest,
isc_task_t task,
isc_event_t **  eventp 
)

Stores task and *eventp away inside *ondest. Ownership of **event is taken from the caller (and *eventp is set to NULL). The task is attached to.

Definition at line 42 of file ondestroy.c.

References isc_ondestroy::events, ISC_LIST_APPEND, ISC_R_SUCCESS, isc_task_attach(), REQUIRE, and VALID_ONDESTROY.

Referenced by dns_db_ondestroy().

void isc_ondestroy_notify ( isc_ondestroy_t ondest,
void *  sender 
)

Dispatches the event(s) to the task(s) that were given in isc_ondestroy_register call(s) (done via calls to isc_task_sendanddetach()). Before dispatch, the sender value of each event structure is set to the value of the sender paramater. The internal structures of the ondest parameter are cleaned out, so no other cleanup is needed.

Definition at line 66 of file ondestroy.c.

References isc_ondestroy::events, ISC_LIST_HEAD, ISC_LIST_UNLINK, isc_task_sendanddetach(), REQUIRE, and VALID_ONDESTROY.

Referenced by free_rbtdb().


Generated on Tue Apr 28 17:41:15 2015 by Doxygen 1.5.4 for BIND9 Internals 9.11.0pre-alpha