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

cq.c File Reference


Detailed Description

Callout queue.

Author:
Raphael Manfredi
Date:
2002-2003

#include "common.h"
#include "cq.h"
#include "misc.h"
#include "tm.h"
#include "walloc.h"
#include "override.h"

Defines

#define HASH_SIZE   1024 /**< Hash list size, must be power of 2 */
 Hash list size, must be power of 2.

#define HASH_MASK   (HASH_SIZE - 1)
#define EV_MAGIC   0xc0110172U /**< Magic number for event marking */
 Magic number for event marking.

#define EV_HASH(x)   (((x) >> 5) & HASH_MASK)
#define EV_OVER(x)   (((x) >> 5) & ~HASH_MASK)
#define valid_ptr(a)   ((gpointer) (a) > GUINT_TO_POINTER(100U))
#define CALLOUT_PERIOD   100 /* milliseconds */

Functions

 RCSID ("$Id:cq.c, v 1.13 2005/11/03 08:37:39 rmanfredi Exp $")
cqueue_tcq_make (time_t now)
 Create a new callout queue object.

void cq_free (cqueue_t *cq)
 Free the callout queue and all contained event objects.

void ev_link (cqueue_t *cq, cevent_t *ev)
 Link event into the callout queue.

void ev_unlink (cqueue_t *cq, cevent_t *ev)
 Unlink event from callout queue.

gpointer cq_insert (cqueue_t *cq, gint delay, cq_service_t fn, gpointer arg)
 Insert a new event in the callout queue and return an opaque handle that can be used to cancel the event.

void cq_cancel (cqueue_t *cq, gpointer handle)
 Cancel a recorded timeout.

void cq_resched (cqueue_t *cq, gpointer handle, gint delay)
 Reschedule event at some other point in time.

void cq_expire (cqueue_t *cq, cevent_t *ev)
 Expire timeout by removing it out of the queue and firing its callback.

void cq_clock (cqueue_t *cq, gint elapsed)
 The heartbeat of our callout queue.

gboolean callout_timer (gpointer p)
 Called every CALLOUT_PERIOD to heartbeat the callout queue.

gdouble callout_queue_coverage (gint old_ticks)
 Returns percentage of coverage of the callout timer, i.e.

void cq_init (void)
 Initialization.

void cq_close (void)
 Final cleanup.


Variables

cqueue_tcallout_queue


Define Documentation

#define CALLOUT_PERIOD   100 /* milliseconds */
 

#define EV_HASH  )     (((x) >> 5) & HASH_MASK)
 

#define EV_MAGIC   0xc0110172U /**< Magic number for event marking */
 

Magic number for event marking.

#define EV_OVER  )     (((x) >> 5) & ~HASH_MASK)
 

#define HASH_MASK   (HASH_SIZE - 1)
 

#define HASH_SIZE   1024 /**< Hash list size, must be power of 2 */
 

Hash list size, must be power of 2.

#define valid_ptr  )     ((gpointer) (a) > GUINT_TO_POINTER(100U))
 


Function Documentation

gdouble callout_queue_coverage gint  old_ticks  ) 
 

Returns percentage of coverage of the callout timer, i.e.

the real amount of ticks we processed divided by the theoretical number, yielding a number between 0.0 and 1.0.

Parameters:
old_ticks the previous amount of processed ticks

gboolean callout_timer gpointer  p  )  [static]
 

Called every CALLOUT_PERIOD to heartbeat the callout queue.

void cq_cancel cqueue_t cq,
gpointer  handle
 

Cancel a recorded timeout.

They give us the opaque handle we returned via cq_insert().

Note:
This routine is also used internally to remove an expired event from the list before firing it off.

void cq_clock cqueue_t cq,
gint  elapsed
 

The heartbeat of our callout queue.

Called to notify us about the elapsed "time" so that we can expire timeouts and maintain our notion of "current time".

void cq_close void   ) 
 

Final cleanup.

void cq_expire cqueue_t cq,
cevent_t ev
 

Expire timeout by removing it out of the queue and firing its callback.

void cq_free cqueue_t cq  ) 
 

Free the callout queue and all contained event objects.

void cq_init void   ) 
 

Initialization.

gpointer cq_insert cqueue_t cq,
gint  delay,
cq_service_t  fn,
gpointer  arg
 

Insert a new event in the callout queue and return an opaque handle that can be used to cancel the event.

The event is specified to occur in some "delay" amount of time, at which time we shall call fn(cq, arg), where cq is the callout queue from where we triggered, and arg is an additional argument.

Returns:
the handle, or NULL on error.

cqueue_t* cq_make time_t  now  ) 
 

Create a new callout queue object.

The 'now' parameter is used to initialize the "current time". Use zero if you don't care...

void cq_resched cqueue_t cq,
gpointer  handle,
gint  delay
 

Reschedule event at some other point in time.

It is the responsibility of the user code to determine that the handle for the event has not yet expired, i.e. that the event has not triggered yet.

void ev_link cqueue_t cq,
cevent_t ev
[static]
 

Link event into the callout queue.

void ev_unlink cqueue_t cq,
cevent_t ev
[static]
 

Unlink event from callout queue.

RCSID "$Id:cq.  c,
v 1.13 2005/11/03 08:37:39 rmanfredi Exp $" 
 


Variable Documentation

cqueue_t* callout_queue
 


Generated on Sun Feb 12 10:49:59 2006 for Gtk-Gnutella by doxygen 1.3.6