107 lines
3.0 KiB
C
107 lines
3.0 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2009 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. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#include "mdef.h"
|
|
#include "locklits.h"
|
|
#include "mlkdef.h"
|
|
#include "zshow.h"
|
|
#include "mvalconv.h"
|
|
|
|
GBLREF uint4 process_id;
|
|
GBLREF mlk_pvtblk *mlk_pvt_root;
|
|
GBLREF mlk_stats_t mlk_stats; /* Process-private M-lock statistics */
|
|
|
|
void zshow_locks(zshow_out *output)
|
|
{
|
|
static readonly char zal[] = "ZAL ";
|
|
static readonly char lck[] = "LOCK ";
|
|
static readonly char lvl[] = " LEVEL=";
|
|
static readonly char mlg[] = "MLG:"; /* # of M Lock commands Granted */
|
|
static readonly char mlt[] = ",MLT:"; /* # of M Lock commands Timed-out */
|
|
mval v;
|
|
mlk_pvtblk *temp;
|
|
unsigned char valstr[MAX_DIGITS_IN_INT8];
|
|
uchar_ptr_t ptr;
|
|
|
|
/* Print LUS statistic */
|
|
output->flush = FALSE;
|
|
v.str.addr = &mlg[0];
|
|
v.str.len = SIZEOF(mlg) - 1;
|
|
zshow_output(output, &v.str);
|
|
ptr = i2ascl((uchar_ptr_t)valstr, mlk_stats.n_user_locks_success);
|
|
v.str.len = (mstr_len_t)(ptr - &valstr[0]);
|
|
v.str.addr = (char *)&valstr[0];
|
|
zshow_output(output, &v.str);
|
|
|
|
/* Print LUF statistic */
|
|
output->flush = FALSE;
|
|
v.str.addr = &mlt[0];
|
|
v.str.len = SIZEOF(mlt) - 1;
|
|
zshow_output(output, &v.str);
|
|
ptr = i2ascl((uchar_ptr_t)valstr, mlk_stats.n_user_locks_fail);
|
|
v.str.len = (mstr_len_t)(ptr - &valstr[0]);
|
|
v.str.addr = (char *)&valstr[0];
|
|
zshow_output(output, &v.str);
|
|
output->flush = TRUE;
|
|
v.str.len = 0;
|
|
zshow_output(output,&v.str);
|
|
|
|
for (temp = mlk_pvt_root; temp; temp = temp->next)
|
|
{
|
|
if (!temp->granted)
|
|
continue;
|
|
if (temp->nodptr && (temp->nodptr->owner != process_id
|
|
|| temp->sequence != temp->nodptr->sequence))
|
|
continue;
|
|
output->flush = FALSE;
|
|
if (temp->level && temp->zalloc)
|
|
{
|
|
v.str.addr = &zal[0];
|
|
v.str.len = SIZEOF(zal) - 1;
|
|
zshow_output(output,&v.str);
|
|
zshow_format_lock(output,temp);
|
|
output->flush = TRUE;
|
|
v.str.len = 0;
|
|
zshow_output(output,&v.str);
|
|
output->flush = FALSE;
|
|
v.str.addr = &lck[0];
|
|
v.str.len = SIZEOF(lck) - 1;
|
|
zshow_output(output,&v.str);
|
|
zshow_format_lock(output,temp);
|
|
v.str.addr = &lvl[0];
|
|
v.str.len = SIZEOF(lvl) - 1;
|
|
zshow_output(output,&v.str);
|
|
MV_FORCE_MVAL(&v,(int)temp->level) ;
|
|
mval_write(output,&v,TRUE);
|
|
} else if (temp->level)
|
|
{
|
|
v.str.addr = &lck[0];
|
|
v.str.len = SIZEOF(lck) - 1;
|
|
zshow_output(output,&v.str);
|
|
zshow_format_lock(output,temp);
|
|
v.str.addr = &lvl[0];
|
|
v.str.len = SIZEOF(lvl) - 1;
|
|
zshow_output(output,&v.str);
|
|
MV_FORCE_MVAL(&v,(int)temp->level) ;
|
|
mval_write(output,&v,TRUE);
|
|
} else if (temp->zalloc)
|
|
{
|
|
v.str.addr = &zal[0];
|
|
v.str.len = SIZEOF(zal) - 1;
|
|
zshow_output(output,&v.str);
|
|
zshow_format_lock(output,temp);
|
|
output->flush = TRUE;
|
|
v.str.len = 0;
|
|
zshow_output(output,&v.str);
|
|
}
|
|
}
|
|
}
|