mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
s3-perfcount: only pass down prs_struct when really required.
Guenther
This commit is contained in:
parent
cd82d4ba56
commit
25ab8828a1
@ -5132,12 +5132,12 @@ uint32 reg_perfcount_get_counter_help(uint32 base_index, char **retbuf);
|
|||||||
uint32 reg_perfcount_get_counter_names(uint32 base_index, char **retbuf);
|
uint32 reg_perfcount_get_counter_names(uint32 base_index, char **retbuf);
|
||||||
bool _reg_perfcount_get_counter_data(TDB_DATA key, TDB_DATA *data);
|
bool _reg_perfcount_get_counter_data(TDB_DATA key, TDB_DATA *data);
|
||||||
bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int instId,
|
int instId,
|
||||||
struct PERF_OBJECT_TYPE *obj,
|
struct PERF_OBJECT_TYPE *obj,
|
||||||
TDB_CONTEXT *names);
|
TDB_CONTEXT *names);
|
||||||
bool _reg_perfcount_add_instance(struct PERF_OBJECT_TYPE *obj,
|
bool _reg_perfcount_add_instance(struct PERF_OBJECT_TYPE *obj,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int instInd,
|
int instInd,
|
||||||
TDB_CONTEXT *names);
|
TDB_CONTEXT *names);
|
||||||
uint32 reg_perfcount_get_perf_data_block(uint32 base_index,
|
uint32 reg_perfcount_get_perf_data_block(uint32 base_index,
|
||||||
|
@ -366,7 +366,7 @@ static uint32 _reg_perfcount_get_numinst(int objInd, TDB_CONTEXT *names)
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static bool _reg_perfcount_add_object(struct PERF_DATA_BLOCK *block,
|
static bool _reg_perfcount_add_object(struct PERF_DATA_BLOCK *block,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int num,
|
int num,
|
||||||
TDB_DATA data,
|
TDB_DATA data,
|
||||||
TDB_CONTEXT *names)
|
TDB_CONTEXT *names)
|
||||||
@ -375,7 +375,7 @@ static bool _reg_perfcount_add_object(struct PERF_DATA_BLOCK *block,
|
|||||||
bool success = True;
|
bool success = True;
|
||||||
struct PERF_OBJECT_TYPE *obj;
|
struct PERF_OBJECT_TYPE *obj;
|
||||||
|
|
||||||
block->objects = (struct PERF_OBJECT_TYPE *)TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
block->objects = (struct PERF_OBJECT_TYPE *)TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
block->objects,
|
block->objects,
|
||||||
struct PERF_OBJECT_TYPE,
|
struct PERF_OBJECT_TYPE,
|
||||||
block->NumObjectTypes+1);
|
block->NumObjectTypes+1);
|
||||||
@ -398,7 +398,7 @@ static bool _reg_perfcount_add_object(struct PERF_DATA_BLOCK *block,
|
|||||||
block->NumObjectTypes+=1;
|
block->NumObjectTypes+=1;
|
||||||
|
|
||||||
for(i = 0; i < (int)obj->NumInstances; i++) {
|
for(i = 0; i < (int)obj->NumInstances; i++) {
|
||||||
success = _reg_perfcount_add_instance(obj, ps, i, names);
|
success = _reg_perfcount_add_instance(obj, mem_ctx, i, names);
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
@ -470,7 +470,7 @@ static uint32 _reg_perfcount_compute_scale(int64_t data)
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static bool _reg_perfcount_get_counter_info(struct PERF_DATA_BLOCK *block,
|
static bool _reg_perfcount_get_counter_info(struct PERF_DATA_BLOCK *block,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int CounterIndex,
|
int CounterIndex,
|
||||||
struct PERF_OBJECT_TYPE *obj,
|
struct PERF_OBJECT_TYPE *obj,
|
||||||
TDB_CONTEXT *names)
|
TDB_CONTEXT *names)
|
||||||
@ -546,7 +546,7 @@ static bool _reg_perfcount_get_counter_info(struct PERF_DATA_BLOCK *block,
|
|||||||
SAFE_FREE(data.dptr);
|
SAFE_FREE(data.dptr);
|
||||||
|
|
||||||
obj->counter_data.ByteLength += dsize + padding;
|
obj->counter_data.ByteLength += dsize + padding;
|
||||||
obj->counter_data.data = TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
obj->counter_data.data = TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
obj->counter_data.data,
|
obj->counter_data.data,
|
||||||
uint8,
|
uint8,
|
||||||
obj->counter_data.ByteLength - sizeof(uint32));
|
obj->counter_data.ByteLength - sizeof(uint32));
|
||||||
@ -599,7 +599,7 @@ struct PERF_OBJECT_TYPE *_reg_perfcount_find_obj(struct PERF_DATA_BLOCK *block,
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static bool _reg_perfcount_add_counter(struct PERF_DATA_BLOCK *block,
|
static bool _reg_perfcount_add_counter(struct PERF_DATA_BLOCK *block,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int num,
|
int num,
|
||||||
TDB_DATA data,
|
TDB_DATA data,
|
||||||
TDB_CONTEXT *names)
|
TDB_CONTEXT *names)
|
||||||
@ -634,7 +634,7 @@ static bool _reg_perfcount_add_counter(struct PERF_DATA_BLOCK *block,
|
|||||||
parent, num));
|
parent, num));
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
obj->counters = (struct PERF_COUNTER_DEFINITION *)TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
obj->counters = (struct PERF_COUNTER_DEFINITION *)TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
obj->counters,
|
obj->counters,
|
||||||
struct PERF_COUNTER_DEFINITION,
|
struct PERF_COUNTER_DEFINITION,
|
||||||
obj->NumCounters+1);
|
obj->NumCounters+1);
|
||||||
@ -645,7 +645,7 @@ static bool _reg_perfcount_add_counter(struct PERF_DATA_BLOCK *block,
|
|||||||
obj->counters[obj->NumCounters].CounterHelpTitleIndex=num+1;
|
obj->counters[obj->NumCounters].CounterHelpTitleIndex=num+1;
|
||||||
obj->counters[obj->NumCounters].DetailLevel = PERF_DETAIL_NOVICE;
|
obj->counters[obj->NumCounters].DetailLevel = PERF_DETAIL_NOVICE;
|
||||||
obj->counters[obj->NumCounters].ByteLength = sizeof(struct PERF_COUNTER_DEFINITION);
|
obj->counters[obj->NumCounters].ByteLength = sizeof(struct PERF_COUNTER_DEFINITION);
|
||||||
success = _reg_perfcount_get_counter_info(block, ps, num, obj, names);
|
success = _reg_perfcount_get_counter_info(block, mem_ctx, num, obj, names);
|
||||||
obj->NumCounters += 1;
|
obj->NumCounters += 1;
|
||||||
start = stop + 1;
|
start = stop + 1;
|
||||||
}
|
}
|
||||||
@ -661,7 +661,7 @@ static bool _reg_perfcount_add_counter(struct PERF_DATA_BLOCK *block,
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int instId,
|
int instId,
|
||||||
struct PERF_OBJECT_TYPE *obj,
|
struct PERF_OBJECT_TYPE *obj,
|
||||||
TDB_CONTEXT *names)
|
TDB_CONTEXT *names)
|
||||||
@ -686,7 +686,7 @@ bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
|||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
inst->counter_data.ByteLength = data.dsize + sizeof(inst->counter_data.ByteLength);
|
inst->counter_data.ByteLength = data.dsize + sizeof(inst->counter_data.ByteLength);
|
||||||
inst->counter_data.data = TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
inst->counter_data.data = TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
inst->counter_data.data,
|
inst->counter_data.data,
|
||||||
uint8,
|
uint8,
|
||||||
data.dsize);
|
data.dsize);
|
||||||
@ -713,12 +713,12 @@ bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
|||||||
memset(buf, 0, PERFCOUNT_MAX_LEN);
|
memset(buf, 0, PERFCOUNT_MAX_LEN);
|
||||||
memcpy(buf, data.dptr, MIN(PERFCOUNT_MAX_LEN-1,data.dsize));
|
memcpy(buf, data.dptr, MIN(PERFCOUNT_MAX_LEN-1,data.dsize));
|
||||||
buf[PERFCOUNT_MAX_LEN-1] = '\0';
|
buf[PERFCOUNT_MAX_LEN-1] = '\0';
|
||||||
inst->NameLength = rpcstr_push_talloc(ps->mem_ctx, &name, buf);
|
inst->NameLength = rpcstr_push_talloc(mem_ctx, &name, buf);
|
||||||
if (inst->NameLength == (uint32_t)-1 || !name) {
|
if (inst->NameLength == (uint32_t)-1 || !name) {
|
||||||
SAFE_FREE(data.dptr);
|
SAFE_FREE(data.dptr);
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
inst->data = TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
inst->data = TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
inst->data,
|
inst->data,
|
||||||
uint8,
|
uint8,
|
||||||
inst->NameLength);
|
inst->NameLength);
|
||||||
@ -740,7 +740,7 @@ bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
|||||||
if((pad = (inst->ByteLength % 8)))
|
if((pad = (inst->ByteLength % 8)))
|
||||||
{
|
{
|
||||||
pad = 8 - pad;
|
pad = 8 - pad;
|
||||||
inst->data = TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
inst->data = TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
inst->data,
|
inst->data,
|
||||||
uint8,
|
uint8,
|
||||||
inst->NameLength + pad);
|
inst->NameLength + pad);
|
||||||
@ -755,14 +755,14 @@ bool _reg_perfcount_get_instance_info(struct PERF_INSTANCE_DEFINITION *inst,
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
bool _reg_perfcount_add_instance(struct PERF_OBJECT_TYPE *obj,
|
bool _reg_perfcount_add_instance(struct PERF_OBJECT_TYPE *obj,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int instInd,
|
int instInd,
|
||||||
TDB_CONTEXT *names)
|
TDB_CONTEXT *names)
|
||||||
{
|
{
|
||||||
struct PERF_INSTANCE_DEFINITION *inst;
|
struct PERF_INSTANCE_DEFINITION *inst;
|
||||||
|
|
||||||
if(obj->instances == NULL) {
|
if(obj->instances == NULL) {
|
||||||
obj->instances = TALLOC_REALLOC_ARRAY(ps->mem_ctx,
|
obj->instances = TALLOC_REALLOC_ARRAY(mem_ctx,
|
||||||
obj->instances,
|
obj->instances,
|
||||||
struct PERF_INSTANCE_DEFINITION,
|
struct PERF_INSTANCE_DEFINITION,
|
||||||
obj->NumInstances);
|
obj->NumInstances);
|
||||||
@ -772,14 +772,14 @@ bool _reg_perfcount_add_instance(struct PERF_OBJECT_TYPE *obj,
|
|||||||
|
|
||||||
memset(&(obj->instances[instInd]), 0, sizeof(struct PERF_INSTANCE_DEFINITION));
|
memset(&(obj->instances[instInd]), 0, sizeof(struct PERF_INSTANCE_DEFINITION));
|
||||||
inst = &(obj->instances[instInd]);
|
inst = &(obj->instances[instInd]);
|
||||||
return _reg_perfcount_get_instance_info(inst, ps, instInd, obj, names);
|
return _reg_perfcount_get_instance_info(inst, mem_ctx, instInd, obj, names);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static int _reg_perfcount_assemble_global(struct PERF_DATA_BLOCK *block,
|
static int _reg_perfcount_assemble_global(struct PERF_DATA_BLOCK *block,
|
||||||
prs_struct *ps,
|
TALLOC_CTX *mem_ctx,
|
||||||
int base_index,
|
int base_index,
|
||||||
TDB_CONTEXT *names)
|
TDB_CONTEXT *names)
|
||||||
{
|
{
|
||||||
@ -796,9 +796,9 @@ static int _reg_perfcount_assemble_global(struct PERF_DATA_BLOCK *block,
|
|||||||
if(data.dptr != NULL)
|
if(data.dptr != NULL)
|
||||||
{
|
{
|
||||||
if(_reg_perfcount_isparent(data))
|
if(_reg_perfcount_isparent(data))
|
||||||
success = _reg_perfcount_add_object(block, ps, j, data, names);
|
success = _reg_perfcount_add_object(block, mem_ctx, j, data, names);
|
||||||
else if(_reg_perfcount_ischild(data))
|
else if(_reg_perfcount_ischild(data))
|
||||||
success = _reg_perfcount_add_counter(block, ps, j, data, names);
|
success = _reg_perfcount_add_counter(block, mem_ctx, j, data, names);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DEBUG(3, ("Bogus relationship [%s] for counter [%d].\n", data.dptr, j));
|
DEBUG(3, ("Bogus relationship [%s] for counter [%d].\n", data.dptr, j));
|
||||||
@ -914,12 +914,13 @@ static bool make_systemtime(struct SYSTEMTIME *systime, struct tm *unixtime)
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static bool _reg_perfcount_init_data_block(struct PERF_DATA_BLOCK *block,
|
static bool _reg_perfcount_init_data_block(struct PERF_DATA_BLOCK *block,
|
||||||
prs_struct *ps, TDB_CONTEXT *names)
|
TALLOC_CTX *mem_ctx, TDB_CONTEXT *names,
|
||||||
|
bool bigendian_data)
|
||||||
{
|
{
|
||||||
smb_ucs2_t *temp = NULL;
|
smb_ucs2_t *temp = NULL;
|
||||||
time_t tm;
|
time_t tm;
|
||||||
|
|
||||||
if (rpcstr_push_talloc(ps->mem_ctx, &temp, "PERF")==(size_t)-1) {
|
if (rpcstr_push_talloc(mem_ctx, &temp, "PERF")==(size_t)-1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!temp) {
|
if (!temp) {
|
||||||
@ -927,7 +928,7 @@ static bool _reg_perfcount_init_data_block(struct PERF_DATA_BLOCK *block,
|
|||||||
}
|
}
|
||||||
memcpy(block->Signature, temp, strlen_w(temp) *2);
|
memcpy(block->Signature, temp, strlen_w(temp) *2);
|
||||||
|
|
||||||
if(ps->bigendian_data == RPC_BIG_ENDIAN)
|
if(bigendian_data)
|
||||||
block->LittleEndian = 0;
|
block->LittleEndian = 0;
|
||||||
else
|
else
|
||||||
block->LittleEndian = 1;
|
block->LittleEndian = 1;
|
||||||
@ -943,7 +944,7 @@ static bool _reg_perfcount_init_data_block(struct PERF_DATA_BLOCK *block,
|
|||||||
memset(temp, 0, sizeof(temp));
|
memset(temp, 0, sizeof(temp));
|
||||||
rpcstr_push((void *)temp, global_myname(), sizeof(temp), STR_TERMINATE);
|
rpcstr_push((void *)temp, global_myname(), sizeof(temp), STR_TERMINATE);
|
||||||
block->SystemNameLength = (strlen_w(temp) * 2) + 2;
|
block->SystemNameLength = (strlen_w(temp) * 2) + 2;
|
||||||
block->data = TALLOC_ZERO_ARRAY(ps->mem_ctx, uint8, block->SystemNameLength + (8 - (block->SystemNameLength % 8)));
|
block->data = TALLOC_ZERO_ARRAY(mem_ctx, uint8, block->SystemNameLength + (8 - (block->SystemNameLength % 8)));
|
||||||
if (block->data == NULL) {
|
if (block->data == NULL) {
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
@ -1072,7 +1073,7 @@ uint32 reg_perfcount_get_perf_data_block(uint32 base_index,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_reg_perfcount_init_data_block(block, ps, names)) {
|
if (!_reg_perfcount_init_data_block(block, ps->mem_ctx, names, ps->bigendian_data)) {
|
||||||
DEBUG(0, ("_reg_perfcount_init_data_block failed\n"));
|
DEBUG(0, ("_reg_perfcount_init_data_block failed\n"));
|
||||||
tdb_close(names);
|
tdb_close(names);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1083,12 +1084,12 @@ uint32 reg_perfcount_get_perf_data_block(uint32 base_index,
|
|||||||
if(object_ids == NULL)
|
if(object_ids == NULL)
|
||||||
{
|
{
|
||||||
/* we're getting a request for "Global" here */
|
/* we're getting a request for "Global" here */
|
||||||
retval = _reg_perfcount_assemble_global(block, ps, base_index, names);
|
retval = _reg_perfcount_assemble_global(block, ps->mem_ctx, base_index, names);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* we're getting a request for a specific set of PERF_OBJECT_TYPES */
|
/* we're getting a request for a specific set of PERF_OBJECT_TYPES */
|
||||||
retval = _reg_perfcount_assemble_global(block, ps, base_index, names);
|
retval = _reg_perfcount_assemble_global(block, ps->mem_ctx, base_index, names);
|
||||||
}
|
}
|
||||||
buffer_size = _reg_perfcount_perf_data_block_fixup(block, ps);
|
buffer_size = _reg_perfcount_perf_data_block_fixup(block, ps);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user