54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001 Sanchez Computer Associates, 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. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#define STARVED -1
|
|
#define BLOCKED 0
|
|
#define GRANTED 1
|
|
|
|
/* One for each blocked client process waiting for a lock */
|
|
typedef struct cm_lckblkprc_struct
|
|
{
|
|
struct cm_lckblkprc_struct *next;
|
|
struct cm_lckblkprc_struct *last;
|
|
struct cs_struct *user;
|
|
mlk_shrblk_ptr_t blocked;
|
|
uint4 blk_sequence;
|
|
} cm_lckblkprc;
|
|
|
|
typedef cm_lckblkprc *cm_lckblkprc_ptr_t;
|
|
|
|
/* One for each blocked client lock being waited on */
|
|
typedef struct cm_lckblklck_struct
|
|
{
|
|
struct cm_lckblklck_struct *next;
|
|
struct cm_lckblklck_struct *last;
|
|
mlk_shrblk_ptr_t node;
|
|
cm_lckblkprc_ptr_t prc;
|
|
uint4 sequence; /* Used to determine when we should retry lock */
|
|
ABS_TIME blktime;
|
|
} cm_lckblklck;
|
|
|
|
typedef cm_lckblklck *cm_lckblklck_ptr_t;
|
|
|
|
/* One for each region having a blocked lock */
|
|
typedef struct cm_lckblkreg_struct
|
|
{
|
|
struct cm_region_head_struct *region;
|
|
struct cm_lckblkreg_struct *next;
|
|
cm_lckblklck_ptr_t lock;
|
|
uint4 pass;
|
|
} cm_lckblkreg;
|
|
|
|
typedef cm_lckblkreg *cm_lckblkreg_ptr_t;
|
|
|
|
#define CM_LKBLK_TIME 16000 /* ms */
|
|
#define CM_LKSTARVE_TIME 500 /* ms */
|