fis-gtm/sr_unix/gt_timer.h

118 lines
4.3 KiB
C

/****************************************************************
* *
* Copyright 2001, 2011 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#ifndef __GT_TIMER_H__
#define __GT_TIMER_H__
/*
* -----------------------------------------------------
* System dependent include file for gtm timer package
* -----------------------------------------------------
*/
#include <signal.h>
typedef INTPTR_T TID; /* Timer ID type */
/*
* -----------------------------------------------------
* Gtm timer package uses ABS_TIME structure to carry
* the time information in operating system independent
* manner. The time in this structure is stored as
* an absolute time - elapsed time since some major historic
* event, or some other fixed date in the past. Different
* operating systems have different time reference points.
*
* The time is converted from the OS time format to
* the ABS_TIME format, and from then on, all
* timer related code uses this format.
* -----------------------------------------------------
*/
typedef struct tag_abs_time {
long at_sec; /* seconds */
long at_usec; /* and microseconds */
} ABS_TIME;
#include <sys/time.h>
/* Type that corresponds to the tv_usec field in a timeval struct. Valid across all platforms */
#if defined(__linux__) || defined(__ia64) || defined(__sparc) || defined(_AIX) || defined(__MVS__)
typedef suseconds_t gtm_tv_usec_t;
#elif defined(__hppa)
typedef long gtm_tv_usec_t;
#elif defined(__osf__)
typedef int gtm_tv_usec_t;
#elif !defined(VMS)
# error unsupported platform
#endif
/*
* -----------------------------------------------------
* All timer requests are placed into a linked list, or
* a queue of pending requests in a time order.
* The first timer in this queue is the currently
* active timer, and expires first.
* -----------------------------------------------------
*/
typedef struct tag_ts {
ABS_TIME expir_time; /* Absolute Time when timer expires */
void (*handler)(); /* Pointer to handler routine */
struct tag_ts *next; /* Pointer to next */
TID tid; /* Timer id */
int4 safe; /* just sets flags, no real work */
int4 hd_len_max; /* Max length this blk can hold */
int4 hd_len; /* Handler data length */
GTM64_ONLY(int4 padding;) /* Padding for 8 byte alignment of hd_data. Remove if hd_data
* is made to starts on a 8 byte boundary (for GTM64)
*/
char hd_data[1]; /* Handler data */
} GT_TIMER;
/*
* Struct to track timefree block allocations
*/
typedef struct st_timer_alloc
{
void *addr;
struct st_timer_alloc *next;
}st_timer_alloc;
#define GT_WAKE
int4 abs_time_comp(ABS_TIME *atp1, ABS_TIME *atp2);
void add_int_to_abs_time(ABS_TIME *atps, int4 ival, ABS_TIME *atpd);
void cancel_timer(TID tid);
void clear_timers(void);
void hiber_start(uint4 hiber);
void hiber_start_wait_any(uint4 hiber);
void start_timer(TID tid, int4 time_to_expir, void(* handler)(), int4 data_length, void *handler_data);
ABS_TIME sub_abs_time(ABS_TIME *atp1, ABS_TIME *atp2);
void sys_get_curr_time(ABS_TIME *atp);
void uninit_timers(void);
void prealloc_gt_timers(void);
void set_blocksig(void);
void check_for_timer_pops(void);
GT_TIMER *find_timer_intr_safe(TID tid, GT_TIMER **tprev);
STATICFNDCL void hiber_wake(TID tid, int4 hd_len, int4 **waitover_flag);
STATICFNDCL void gt_timers_alloc(void);
STATICFNDCL void start_timer_int(TID tid, int4 time_to_expir, void (*handler)(), int4 hdata_len, void *hdata);
STATICFNDCL void sys_settimer (TID tid, ABS_TIME *time_to_expir, void (*handler)());
STATICFNDCL void start_first_timer(ABS_TIME *curr_time);
STATICFNDCL void timer_handler(int why);
STATICFNDCL GT_TIMER *find_timer(TID tid, GT_TIMER **tprev);
STATICFNDCL void add_timer(ABS_TIME *atp, TID tid, int4 time_to_expir, void (*handler)(), int4 hdata_len, void *hdata);
STATICFNDCL void remove_timer(TID tid);
STATICFNDCL void sys_canc_timer (TID tid);
STATICFNDCL void uninit_all_timers(void);
STATICFNDCL void cancel_all_timers(void);
STATICFNDCL void init_timers(void);
#endif