[SIGAR-84] Prevent crash when perf counters are disabled
This commit is contained in:
		
							parent
							
								
									2959b4a4ea
								
							
						
					
					
						commit
						936a8a79c5
					
				@ -29,6 +29,7 @@
 | 
				
			|||||||
#define PERFBUF_SIZE 8192
 | 
					#define PERFBUF_SIZE 8192
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PERF_TITLE_PROC       230
 | 
					#define PERF_TITLE_PROC       230
 | 
				
			||||||
 | 
					#define PERF_TITLE_MEM_KEY   "4"
 | 
				
			||||||
#define PERF_TITLE_PROC_KEY  "230"
 | 
					#define PERF_TITLE_PROC_KEY  "230"
 | 
				
			||||||
#define PERF_TITLE_CPU_KEY   "238"
 | 
					#define PERF_TITLE_CPU_KEY   "238"
 | 
				
			||||||
#define PERF_TITLE_DISK_KEY  "236"
 | 
					#define PERF_TITLE_DISK_KEY  "236"
 | 
				
			||||||
@ -139,6 +140,25 @@ static DWORD perfbuf_grow(sigar_t *sigar)
 | 
				
			|||||||
    return sigar->perfbuf_size;
 | 
					    return sigar->perfbuf_size;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *get_counter_name(char *key)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (strEQ(key, PERF_TITLE_MEM_KEY)) {
 | 
				
			||||||
 | 
					        return "Memory";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (strEQ(key, PERF_TITLE_PROC_KEY)) {
 | 
				
			||||||
 | 
					        return "Process";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (strEQ(key, PERF_TITLE_CPU_KEY)) {
 | 
				
			||||||
 | 
					        return "Processor";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (strEQ(key, PERF_TITLE_DISK_KEY)) {
 | 
				
			||||||
 | 
					        return "LogicalDisk";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        return key;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar,
 | 
					static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar,
 | 
				
			||||||
                                              char *counter_key,
 | 
					                                              char *counter_key,
 | 
				
			||||||
                                              DWORD inst, DWORD *err)
 | 
					                                              DWORD inst, DWORD *err)
 | 
				
			||||||
@ -167,6 +187,13 @@ static PERF_OBJECT_TYPE *get_perf_object_inst(sigar_t *sigar,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    block = (PERF_DATA_BLOCK *)sigar->perfbuf;
 | 
					    block = (PERF_DATA_BLOCK *)sigar->perfbuf;
 | 
				
			||||||
 | 
					    if (block->NumObjectTypes == 0) {
 | 
				
			||||||
 | 
					        counter_key = get_counter_name(counter_key);
 | 
				
			||||||
 | 
					        sigar_strerror_printf(sigar, "No %s counters defined (disabled?)",
 | 
				
			||||||
 | 
					                              counter_key);
 | 
				
			||||||
 | 
					        *err = -1;
 | 
				
			||||||
 | 
					        return NULL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    object = PdhFirstObject(block);
 | 
					    object = PdhFirstObject(block);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* 
 | 
					    /* 
 | 
				
			||||||
@ -197,7 +224,7 @@ static int get_swap_counters(sigar_t *sigar, sigar_swap_t *swap)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    int status;
 | 
					    int status;
 | 
				
			||||||
    PERF_OBJECT_TYPE *object =
 | 
					    PERF_OBJECT_TYPE *object =
 | 
				
			||||||
        get_perf_object_inst(sigar, "4" /* Memory */, 0, &status);
 | 
					        get_perf_object_inst(sigar, PERF_TITLE_MEM_KEY, 0, &status);
 | 
				
			||||||
    PERF_INSTANCE_DEFINITION *inst;
 | 
					    PERF_INSTANCE_DEFINITION *inst;
 | 
				
			||||||
    PERF_COUNTER_DEFINITION *counter;
 | 
					    PERF_COUNTER_DEFINITION *counter;
 | 
				
			||||||
    BYTE *data;
 | 
					    BYTE *data;
 | 
				
			||||||
@ -646,7 +673,7 @@ static PERF_INSTANCE_DEFINITION *get_cpu_instance(sigar_t *sigar,
 | 
				
			|||||||
                                                  DWORD *perf_offsets,
 | 
					                                                  DWORD *perf_offsets,
 | 
				
			||||||
                                                  DWORD *num, DWORD *err)
 | 
					                                                  DWORD *num, DWORD *err)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PERF_OBJECT_TYPE *object = get_perf_object(sigar, "238", err);
 | 
					    PERF_OBJECT_TYPE *object = get_perf_object(sigar, PERF_TITLE_CPU_KEY, err);
 | 
				
			||||||
    PERF_INSTANCE_DEFINITION *inst;
 | 
					    PERF_INSTANCE_DEFINITION *inst;
 | 
				
			||||||
    PERF_COUNTER_DEFINITION *counter;
 | 
					    PERF_COUNTER_DEFINITION *counter;
 | 
				
			||||||
    DWORD i;
 | 
					    DWORD i;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user