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:
parent
9a5602ded8
commit
012457e9b2
55
src/top.c
55
src/top.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user