From: Thierry Lorthiois Date: Tue, 18 Nov 2008 22:14:01 +0000 (+0000) Subject: fixed memory leak X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=ccc5459cbbd1d69224104d82d45b3b1d767bd1b2;p=chaz%2Ftint2 fixed memory leak --- diff --git a/src/Makefile b/src/Makefile index 31fe027..5b8b2b7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -22,7 +22,7 @@ endif $(PROGNAME): $(FILES) $(SYSTRAYOBJ) $(CC) $(CFLAGS) -I. -Iutil -Iclock -Itaskbar -Isystray -o $(PROGNAME) $(FILES) $(FLAGS) - strip $(PROGNAME) + #strip $(PROGNAME) install: mkdir -p $(BINDIR) diff --git a/src/config.c b/src/config.c index 850fbc9..e4b6c2d 100644 --- a/src/config.c +++ b/src/config.c @@ -46,23 +46,27 @@ void cleanup_taskbar() { - free_area(&panel.area); - + GSList *l0; + Task *tsk; + int i, nb; - Task *tsk, *next; - nb = panel.nb_desktop * panel.nb_monitor; for (i=0 ; i < nb ; i++) { -/* TODO: voir ce code !! - for (tsk = panel.taskbar[i].tasklist; tsk ; tsk = next) { - next = tsk->next; + l0 = panel.taskbar[i].area.list; + while (l0) { + tsk = l0->data; + l0 = l0->next; + // careful : remove_task change l0->next remove_task (tsk); } -*/ + + free_area (&panel.taskbar[i].area); } free(panel.taskbar); panel.taskbar = 0; + + free_area(&panel.area); } diff --git a/src/taskbar/task.c b/src/taskbar/task.c index 4115cbe..960b53b 100644 --- a/src/taskbar/task.c +++ b/src/taskbar/task.c @@ -65,14 +65,15 @@ void add_task (Window win) new_tsk->title = 0; } if (new_tsk->icon_data) { - XFree (new_tsk->icon_data); + free (new_tsk->icon_data); new_tsk->icon_data = 0; } free(new_tsk); fprintf(stderr, "task on all desktop : ignored\n"); return; } - + + //printf("add_task %d %s\n", index(desktop, monitor), new_tsk->title); Taskbar *tskbar; tskbar = &panel.taskbar[index(desktop, monitor)]; new_tsk->area.parent = tskbar; @@ -92,13 +93,14 @@ void remove_task (Task *tsk) tskbar->area.list = g_slist_remove(tskbar->area.list, tsk); resize_tasks (tskbar); redraw (&tskbar->area); + //printf("remove_task %d %s\n", index(tskbar->desktop, tskbar->monitor), tsk->title); if (tsk->title) { free (tsk->title); tsk->title = 0; } if (tsk->icon_data) { - XFree (tsk->icon_data); + free (tsk->icon_data); tsk->icon_data = 0; } XFreePixmap (server.dsp, tsk->area.pmap); diff --git a/src/taskbar/taskbar.c b/src/taskbar/taskbar.c index db08f6d..99e6a17 100644 --- a/src/taskbar/taskbar.c +++ b/src/taskbar/taskbar.c @@ -66,14 +66,17 @@ void task_refresh_tasklist () nb = panel.nb_desktop * panel.nb_monitor; for (i=0 ; i < nb ; i++) { - for (l0 = panel.taskbar[i].area.list; l0 ; l0 = l0->next) { + l0 = panel.taskbar[i].area.list; + while (l0) { tsk = l0->data; - + l0 = l0->next; + if (tsk->win == active_win) panel.task_active = tsk; for (j = 0; j < num_results; j++) { if (tsk->win == win[j]) break; } + // careful : remove_task change l0->next if (tsk->win != win[j]) remove_task (tsk); } } diff --git a/src/tint.c b/src/tint.c index 46c0c22..821048b 100644 --- a/src/tint.c +++ b/src/tint.c @@ -288,9 +288,11 @@ void event_property_notify (Window win, Atom at) } /* Window icon changed */ else if (at == server.atom._NET_WM_ICON) { - if (tsk->icon_data != 0) XFree (tsk->icon_data); + if (tsk->icon_data) { + free (tsk->icon_data); + tsk->icon_data = 0; + } tsk->area.redraw = 1; - tsk->icon_data = 0; panel.refresh = 1; } /* Window desktop changed */ diff --git a/src/tint2 b/src/tint2 index 04154da..2eafd70 100755 Binary files a/src/tint2 and b/src/tint2 differ