1
0
mirror of https://github.com/Llewellynvdm/conky.git synced 2024-11-18 02:55:12 +00:00

fixed memory leak in new linked list top routine

git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky@401 7f574dfc-610e-0410-a909-a81674777703
This commit is contained in:
David Carter 2005-11-12 02:57:48 +00:00
parent 9a5602ded8
commit 012457e9b2

View File

@ -18,6 +18,8 @@ struct process *get_first_process()
return first_process; return first_process;
} }
void free_all_processes(struct process *pr) void free_all_processes(struct process *pr)
{ {
struct process *next = NULL; struct process *next = NULL;
@ -396,6 +398,28 @@ inline static void calc_cpu_each(unsigned long total)
/* Find the top processes */ /* Find the top processes */
/******************************************/ /******************************************/
// static int tot_struct; //for debugging..uncomment this and the 2 printfs in the next two functs
/*
* free a sp_process structure
*/
void free_sp(struct sorted_process * sp) {
free(sp);
//printf("free: %d structs\n",--tot_struct );
}
/*
* create a new sp_process structure
*/
struct sorted_process * malloc_sp(struct process * proc) {
struct sorted_process * sp;
sp = malloc(sizeof(struct sorted_process));
sp->greater = NULL;
sp->less = NULL;
sp->proc = proc;
//printf("malloc: %d structs\n", ++tot_struct);
return(sp);
}
/* /*
* cpu comparison function for insert_sp_element * cpu comparison function for insert_sp_element
@ -453,32 +477,20 @@ int insert_sp_element(
sp_cur->greater=*p_sp_tail; sp_cur->greater=*p_sp_tail;
*p_sp_tail = sp_cur; *p_sp_tail = sp_cur;
did_insert=x; did_insert=x;
} else if (x == max_elements && sp_readthru != NULL) { } else if (x >= max_elements) {
/* we inserted an element and now the list is too big by one. Destroy the smallest element */ /* we inserted an element and now the list is too big by one. Destroy the smallest element */
sp_destroy = sp_readthru; sp_destroy = *p_sp_tail;
sp_readthru->greater->less = NULL; *p_sp_tail = sp_destroy->greater;
*p_sp_tail = sp_readthru->greater; (*p_sp_tail)->less = NULL;
free(sp_destroy); free_sp(sp_destroy);
} }
if (!did_insert) { if (!did_insert) {
/* sp_cur wasn't added to the sorted list, so destroy it */ /* sp_cur wasn't added to the sorted list, so destroy it */
free(sp_cur); free_sp(sp_cur);
} }
return did_insert; return did_insert;
} }
/*
* create a new sp_process structure
*/
struct sorted_process * malloc_sp(struct process * proc) {
struct sorted_process * sp;
sp = malloc(sizeof(struct sorted_process));
sp->greater = NULL;
sp->less = NULL;
sp->proc = proc;
return(sp);
}
/* /*
* copy the procs in the sorted list to the array, and destroy the list * copy the procs in the sorted list to the array, and destroy the list
*/ */
@ -487,11 +499,11 @@ void sp_acopy(struct sorted_process *sp_head, struct process ** ar, int max_size
struct sorted_process * sp_cur, * sp_tmp; struct sorted_process * sp_cur, * sp_tmp;
int x; int x;
sp_cur = sp_head; sp_cur = sp_head;
for (x = 0; x < max_size && sp_cur != NULL; x++) { for (x=0; x < max_size && sp_cur != NULL; x++) {
ar[x] = sp_cur->proc; ar[x] = sp_cur->proc;
sp_tmp = sp_cur; sp_tmp = sp_cur;
sp_cur = sp_cur->less; sp_cur= sp_cur->less;
free(sp_tmp); free_sp(sp_tmp);
} }
} }
@ -520,6 +532,7 @@ inline void process_find_top(struct process **cpu, struct process **mem)
cur_proc = first_process; cur_proc = first_process;
while (cur_proc !=NULL) { while (cur_proc !=NULL) {
//printf("\n\n cur_proc: %s %f %f\n",cur_proc->name, cur_proc->totalmem, cur_proc->amount );
if (top_cpu) { if (top_cpu) {
spc_cur = malloc_sp(cur_proc); spc_cur = malloc_sp(cur_proc);
insert_sp_element(spc_cur, &spc_head, &spc_tail, MAX_SP, &compare_cpu); insert_sp_element(spc_cur, &spc_head, &spc_tail, MAX_SP, &compare_cpu);