Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

monitor.c File Reference

#include "monitor.h"
#include <ucontext.h>
#include "sysinfo.h"

Defines

#define _GNU_SOURCE   /* allows F_SETSIG */
#define INHANDLERCONTEXT(mon)   ( aw_in_monthread( (mon)->handler_q.thread ) )
#define SEND_HANDLER_EVENT(args, trigger_event, event_sig, type, slot, val)
 ###################### support for handler events

#define SEND_MONITOR_EVENT(mon, event_sig, type, slot, val)
 ###################### support for monitor events


Functions

aw_handlerid_t aw_add_handler (aw_monitor_t *mon, aw_handler_t *handler)
 Add handler to list of executing handlers.

int32_t aw_add_handler_fdcallback (aw_monitor_t *mon, aw_handler_t *handler, int32_t fd, aw_handler_code_t(*callback)(aw_handler_args_t *args, int32_t fd))
 Register a callback to be called when data is available on fd for a handler. Only executed for RUNNING handler. Relationship is 1-1 for fd to handler.

int32_t aw_add_handler_irecallback (aw_monitor_t *mon, aw_handler_t *handler, aw_address_t ire_id, aw_alarm_sched_t *sched, aw_handler_code_t(*callback)(aw_handler_args_t *args, aw_event_t *e))
 Register a callback to be called for every "interrupt" event.Only executed for RUNNING handler. Relationship is 1-1 for fd to handler.

aw_monitor_t * aw_create_monitor (aw_monitor_params_t *params)
 Malloc , clear, set, init mutex, return object.

void aw_destroy_monitor (aw_monitor_t *mon)
 Cleanup , free resources.

void aw_handler_append_outq (aw_event_t *e, aw_event_t *te, aw_handler_args_t *args)
 Send event to handlers.

void aw_handler_float32_event (aw_handler_args_t *args, aw_event_t *trigger_event, aw_event_sig_t *event_sig, float32_t val)
 Send float32 event to handlers.

void aw_handler_float64_event (aw_handler_args_t *args, aw_event_t *trigger_event, aw_event_sig_t *event_sig, float64_t val)
 Send float64 event to handlers.

void aw_handler_int32_event (aw_handler_args_t *args, aw_event_t *trigger_event, aw_event_sig_t *event_sig, u_int32_t val)
 Send int32 event to handlers.

void aw_handler_int64_event (aw_handler_args_t *args, aw_event_t *trigger_event, aw_event_sig_t *event_sig, u_int64_t val)
 Send int64 event to handlers.

void aw_handler_string_event (aw_handler_args_t *args, aw_event_t *trigger_event, aw_event_sig_t *event_sig, byte_t *val, int32_t dup)
 Send string event to handlers, NOTE: this will free the string later!

void aw_handler_timestamp_event (aw_handler_args_t *args, aw_event_t *trigger_event, aw_event_sig_t *event_sig, aw_timestamp_t val)
 Send timestamp event to handlers.

void aw_monitor_append_event (aw_event_t *event, aw_monitor_t *mon)
 Send event to handlers.

void aw_monitor_append_q (aw_event_q_t *q, aw_monitor_t *mon)
 Dump contents of q to handlers.

void aw_monitor_float32_event (aw_monitor_t *mon, aw_event_sig_t *event_sig, float32_t val)
 Send float32 event to handlers.

void aw_monitor_float64_event (aw_monitor_t *mon, aw_event_sig_t *event_sig, float64_t val)
 Send float64 event to handlers.

void aw_monitor_int32_event (aw_monitor_t *mon, aw_event_sig_t *event_sig, u_int32_t val)
 Send int32 event to handlers.

void aw_monitor_int64_event (aw_monitor_t *mon, aw_event_sig_t *event_sig, u_int64_t val)
 Send int64 event to handlers.

void aw_monitor_logstats (aw_monitor_t *mon, aw_logger_t *logger)
 Print monitor stats to logger.

void aw_monitor_string_event (aw_monitor_t *mon, aw_event_sig_t *event_sig, byte_t *val, int32_t dup)
 Send string event to handlers, NOTE: this will free the string later!

void aw_monitor_timestamp_event (aw_monitor_t *mon, aw_event_sig_t *event_sig, aw_timestamp_t val)
 Send timestamp event to handlers.

aw_address_t aw_next_event_id (aw_monitor_t *mon)
 Increment and return event id.

void aw_remove_handler (aw_monitor_t *mon, aw_handlerid_t id)
 Remove handler from list of executing handlers.

int32_t aw_remove_handler_fdcallback (aw_monitor_t *mon, int32_t fd)
 Unregister a callback to be called when data is available on fd.

int32_t aw_remove_handler_irecallback (aw_monitor_t *mon, aw_address_t ire_id)
 Unregister a callback.

void aw_reschedule_handler (aw_monitor_t *mon, aw_handler_t *handler, aw_alarm_sched_t *sched)
 Alter an existing schedule for a handler.

aw_address_t aw_reserve_event_mask_bit (aw_monitor_t *mon)
 Returns a mask with 1 bit set guaranteed to be unique.

void aw_signal_handler_irecallback (aw_monitor_t *mon, aw_address_t ire_id)
 Sends an interrupt event to cause the handler to run.

int32_t aw_wait_monitor (aw_monitor_t *mon)
 Block until all monitor threads exit.


Define Documentation

#define _GNU_SOURCE   /* allows F_SETSIG */
 

#define INHANDLERCONTEXT (  mon   )     ( aw_in_monthread( (mon)->handler_q.thread ) )
 

#define SEND_HANDLER_EVENT (  args,
trigger_event,
event_sig,
type,
slot,
val   ) 
 

Value:

{ \
if ( likely( event_sig -> id != 0 ) ) { /* routeable??? */ \
  aw_cache_allocator_t \
    *ef = (args->h->tasklet)?NULL:args->ef; /* can't share ef from tasklets! */ \
  aw_event_t \
    *event ; \
\
  event = aw_create_event(AW_EVENT_CONTEXT_HANDLER, ef); \
\
  if ( likely( event != NULL ) ) { \
\
    event->tstamp = args->currenttime; \
    event->payload_type = type ; \
    event->payload. slot = val; \
    event->sig = *event_sig; \
    aw_handler_append_outq(event, trigger_event, args); \
\
  }/* end if */ \
}/* end if */ \
}
###################### support for handler events

#define SEND_MONITOR_EVENT (  mon,
event_sig,
type,
slot,
val   ) 
 

Value:

{ \
if ( likely( event_sig -> id != 0 ) ) { /* routeable??? */ \
  aw_event_t \
    *event ; \
\
  event = aw_create_event(AW_EVENT_CONTEXT_EXTERNAL, NULL); \
\
  if ( likely ( event != NULL ) ) { \
\
    event->tstamp = aw_gettimestamp(); \
    event->payload_type = type ; \
    event->payload. slot = val; \
    event->sig = *event_sig; \
\
    aw_monitor_append_event(event, mon); \
\
  }/* end if */ \
}/* end if */ \
}
###################### support for monitor events


Function Documentation

aw_handlerid_t aw_add_handler (  aw_monitor_t *  mon,
aw_handler_t *  handler
) 
 

Add handler to list of executing handlers.

aw_add_handler

Parameters:
mon Monitor ptr
handler Handler ptr
Returns:
Returns generated id of handler (needed in aw_remove_handler)

int32_t aw_add_handler_fdcallback (  aw_monitor_t *  mon,
aw_handler_t *  handler,
int32_t  fd,
aw_handler_code_t(*  fdcallback)(aw_handler_args_t *args, int32_t fd)
) 
 

Register a callback to be called when data is available on fd for a handler. Only executed for RUNNING handler. Relationship is 1-1 for fd to handler.

aw_add_handler_fdcallback

Parameters:
mon Monitor ptr
handler Handler ptr
fd File desciptor
fdcallback Callback
Returns:
Returns non-zero if error

int32_t aw_add_handler_irecallback (  aw_monitor_t *  mon,
aw_handler_t *  handler,
aw_address_t  ire_id,
aw_alarm_sched_t *  sched,
aw_handler_code_t(*  callback)(aw_handler_args_t *args, aw_event_t *e)
) 
 

Register a callback to be called for every "interrupt" event.Only executed for RUNNING handler. Relationship is 1-1 for fd to handler.

aw_add_handler_irecallback

Parameters:
mon Monitor ptr
handler Handler ptr
ire_id Event address for alarm
sched Pointer to schedule for alarm
callback Callback function
Returns:
Returns non-zero if error

aw_monitor_t* aw_create_monitor (  aw_monitor_params_t *  params  ) 
 

Malloc , clear, set, init mutex, return object.

aw_create_monitor

Parameters:
params Options struct ptr, NULL is okay (implies defaults)
Returns:
Monitor ptr

void aw_destroy_monitor (  aw_monitor_t *  mon  ) 
 

Cleanup , free resources.

aw_destroy_monitor

Parameters:
mon Monitor ptr

void aw_handler_append_outq (  aw_event_t *  e,
aw_event_t *  te,
aw_handler_args_t *  args
) 
 

Send event to handlers.

aw_handler_append_outq

Parameters:
e Event ptr
te Triggering event (may be NULL)
args Handler args

void aw_handler_float32_event (  aw_handler_args_t *  args,
aw_event_t *  trigger_event,
aw_event_sig_t *  event_sig,
float32_t  val
) 
 

Send float32 event to handlers.

aw_handler_float32_event

Parameters:
args Handler args
trigger_event Event that is triggering this event (may be NULL)
event_sig Event signature
val Value

void aw_handler_float64_event (  aw_handler_args_t *  args,
aw_event_t *  trigger_event,
aw_event_sig_t *  event_sig,
float64_t  val
) 
 

Send float64 event to handlers.

aw_handler_float64_event

Parameters:
args Handler args
trigger_event Event that is triggering this event (may be NULL)
event_sig Event signature
val Value

void aw_handler_int32_event (  aw_handler_args_t *  args,
aw_event_t *  trigger_event,
aw_event_sig_t *  event_sig,
u_int32_t  val
) 
 

Send int32 event to handlers.

aw_handler_int32_event

Parameters:
args Handler args
trigger_event Event that is triggering this event (may be NULL)
event_sig Event signature
val Value

void aw_handler_int64_event (  aw_handler_args_t *  args,
aw_event_t *  trigger_event,
aw_event_sig_t *  event_sig,
u_int64_t  val
) 
 

Send int64 event to handlers.

aw_handler_int64_event

Parameters:
args Handler args
trigger_event Event that is triggering this event (may be NULL)
event_sig Event signature
val Value

void aw_handler_string_event (  aw_handler_args_t *  args,
aw_event_t *  trigger_event,
aw_event_sig_t *  event_sig,
byte_t *  val,
int32_t  dup
) 
 

Send string event to handlers, NOTE: this will free the string later!

aw_handler_string_event

Parameters:
args Handler args
trigger_event Event that is triggering this event (may be NULL)
event_sig Event signature
val String value
dup If non-zero strdup() string inside function. Usually you want this.

void aw_handler_timestamp_event (  aw_handler_args_t *  args,
aw_event_t *  trigger_event,
aw_event_sig_t *  event_sig,
aw_timestamp_t  val
) 
 

Send timestamp event to handlers.

aw_handler_timestamp_event

Parameters:
args Handler args
trigger_event Event that is triggering this event (may be NULL)
event_sig Event signature
val Value

void aw_monitor_append_event (  aw_event_t *  event,
aw_monitor_t *  mon
) 
 

Send event to handlers.

aw_monitor_append_event

Parameters:
event Event ptr
mon Monitor ptr

void aw_monitor_append_q (  aw_event_q_t *  q,
aw_monitor_t *  mon
) 
 

Dump contents of q to handlers.

aw_monitor_append_q

Parameters:
q Event Q ptr
mon Monitor ptr

void aw_monitor_float32_event (  aw_monitor_t *  mon,
aw_event_sig_t *  event_sig,
float32_t  val
) 
 

Send float32 event to handlers.

aw_monitor_float32_event

Parameters:
mon Monitor
event_sig Event signature
val Value

void aw_monitor_float64_event (  aw_monitor_t *  mon,
aw_event_sig_t *  event_sig,
float64_t  val
) 
 

Send float64 event to handlers.

aw_monitor_float64_event

Parameters:
mon Monitor
event_sig Event signature
val Value

void aw_monitor_int32_event (  aw_monitor_t *  mon,
aw_event_sig_t *  event_sig,
u_int32_t  val
) 
 

Send int32 event to handlers.

aw_monitor_int32_event

Parameters:
mon Monitor
event_sig Event signature
val Value

void aw_monitor_int64_event (  aw_monitor_t *  mon,
aw_event_sig_t *  event_sig,
u_int64_t  val
) 
 

Send int64 event to handlers.

aw_monitor_int64_event

Parameters:
mon Monitor
event_sig Event signature
val Value

void aw_monitor_logstats (  aw_monitor_t *  mon,
aw_logger_t *  logger
) 
 

Print monitor stats to logger.

aw_monitor_logstats

Parameters:
mon Monitor
logger Logger

void aw_monitor_string_event (  aw_monitor_t *  mon,
aw_event_sig_t *  event_sig,
byte_t *  val,
int32_t  dup
) 
 

Send string event to handlers, NOTE: this will free the string later!

aw_monitor_string_event

Parameters:
mon Monitor
event_sig Event signature
val String value
dup If non-zero strdup() string inside function. Usually you want this.

void aw_monitor_timestamp_event (  aw_monitor_t *  mon,
aw_event_sig_t *  event_sig,
aw_timestamp_t  val
) 
 

Send timestamp event to handlers.

aw_monitor_timestamp_event

Parameters:
mon Monitor
event_sig Event signature
val Value

aw_address_t aw_next_event_id (  aw_monitor_t *  mon  ) 
 

Increment and return event id.

aw_next_event_id

Parameters:
mon Monitor ptr
Returns:
Returns available event id

void aw_remove_handler (  aw_monitor_t *  mon,
aw_handlerid_t  id
) 
 

Remove handler from list of executing handlers.

aw_remove_handler

Parameters:
mon Monitor ptr
id Id returned from aw_add_handler()

int32_t aw_remove_handler_fdcallback (  aw_monitor_t *  mon,
int32_t  fd
) 
 

Unregister a callback to be called when data is available on fd.

aw_remove_handler_fdcallback

Parameters:
mon Monitor ptr
fd File desciptor
Returns:
Returns non-zero if error

int32_t aw_remove_handler_irecallback (  aw_monitor_t *  mon,
aw_address_t  ire_id
) 
 

Unregister a callback.

aw_remove_handler_irecallback

Parameters:
mon Monitor ptr
ire_id Event address for alarm
Returns:
Returns non-zero if error

void aw_reschedule_handler (  aw_monitor_t *  mon,
aw_handler_t *  handler,
aw_alarm_sched_t *  sched
) 
 

Alter an existing schedule for a handler.

aw_reschedule_handler

Parameters:
mon Monitor ptr
handler Handler ptr
sched The new run schedule

aw_address_t aw_reserve_event_mask_bit (  aw_monitor_t *  mon  ) 
 

Returns a mask with 1 bit set guaranteed to be unique.

aw_reserve_event_mask_bit

Parameters:
mon Monitor ptr
Returns:
Mask w/1 bit set or 0 when all available bits used

void aw_signal_handler_irecallback (  aw_monitor_t *  mon,
aw_address_t  ire_id
) 
 

Sends an interrupt event to cause the handler to run.

aw_signal_handler_irecallback

Parameters:
mon Monitor ptr
ire_id Event address for alarm

int32_t aw_wait_monitor (  aw_monitor_t *  mon  ) 
 

Block until all monitor threads exit.

aw_wait_monitor

Parameters:
mon Monitor ptr
Returns:
Return 0 on success

Aware 0.11.1 Copyright (C) 1998-2005 Russell Leighton (russ@elegant-software.com)