Skip to content

Commit 0a3a923

Browse files
committed
Fix more memory leaks
1 parent 0873aa5 commit 0a3a923

File tree

6 files changed

+33
-19
lines changed

6 files changed

+33
-19
lines changed

src/alarm-list-window.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -618,13 +618,13 @@ void alarm_list_window_snooze_menu_update(AlarmListWindow* list_window)
618618

619619
const gchar* name;
620620
GtkMenuItem* item;
621-
GList* l = NULL;
622621

623622
g_debug("AlarmListWindow: menu_update to %d", applet->snooze_mins);
624623

625-
block_list(gtk_container_get_children(GTK_CONTAINER(menu)), alarm_list_window_snooze_menu_activated);
624+
GList* list = gtk_container_get_children(GTK_CONTAINER(menu));
625+
block_list(list, alarm_list_window_snooze_menu_activated);
626626

627-
for(l = gtk_container_get_children(GTK_CONTAINER(menu)); l != NULL; l = l->next) {
627+
for(GList* l = list; l != NULL; l = l->next) {
628628
item = GTK_MENU_ITEM(l->data);
629629
name = gtk_buildable_get_name(GTK_BUILDABLE(item));
630630
if(g_strcmp0(name, target_name) == 0) {
@@ -634,7 +634,8 @@ void alarm_list_window_snooze_menu_update(AlarmListWindow* list_window)
634634
}
635635
}
636636

637-
unblock_list(gtk_container_get_children(GTK_CONTAINER(menu)), alarm_list_window_snooze_menu_activated);
637+
unblock_list(list, alarm_list_window_snooze_menu_activated);
638+
g_list_free(list);
638639

639640
g_free(target_name);
640641
}

src/alarm.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ static void alarm_set_property(GObject* object, guint prop_id, const GValue* val
289289
g_value_init(&strval, G_TYPE_STRING);
290290
g_value_transform(value, &strval);
291291
g_debug("Alarm(%p) #%d: set %s=%s", alarm, alarm->id, pspec->name, g_value_get_string(&strval));
292+
g_value_unset(&strval);
292293

293294
alarm->changed = TRUE; // Do this for all properties for now (not too much overhead, anyway)
294295

@@ -302,7 +303,9 @@ static void alarm_set_property(GObject* object, guint prop_id, const GValue* val
302303
}
303304
alarm->id = d;
304305

305-
priv->settings = g_settings_new_with_path("io.github.alarm-clock-applet.alarm", alarm_gsettings_get_dir(alarm));
306+
gchar* gsettings_dir = alarm_gsettings_get_dir(alarm);
307+
priv->settings = g_settings_new_with_path("io.github.alarm-clock-applet.alarm", gsettings_dir);
308+
g_free(gsettings_dir);
306309

307310
alarm_gsettings_connect(alarm);
308311
}
@@ -351,28 +354,28 @@ static void alarm_set_property(GObject* object, guint prop_id, const GValue* val
351354
}
352355
break;
353356
case PROP_MESSAGE:
354-
if(alarm->message)
355-
g_free(alarm->message);
356-
357+
g_free(alarm->message);
357358
alarm->message = g_strdup(g_value_get_string(value));
358359
break;
359360
case PROP_REPEAT:
360361
alarm->repeat = g_value_get_flags(value);
361362

362-
if(alarm->active) {
363+
if(alarm->active)
363364
alarm_update_timestamp(alarm);
364-
}
365+
365366
break;
366367
case PROP_NOTIFY_TYPE:
367368
alarm->notify_type = g_value_get_enum(value);
368369
break;
369370
case PROP_SOUND_FILE:
371+
g_free(alarm->sound_file);
370372
alarm->sound_file = g_strdup(g_value_get_string(value));
371373
break;
372374
case PROP_SOUND_LOOP:
373375
alarm->sound_loop = g_value_get_boolean(value);
374376
break;
375377
case PROP_COMMAND:
378+
g_free(alarm->command);
376379
alarm->command = g_strdup(g_value_get_string(value));
377380
break;
378381
default:
@@ -699,6 +702,9 @@ static void alarm_dispose(GObject* object)
699702
g_object_unref(priv->settings);
700703
alarm_timer_remove(alarm);
701704
alarm_clear(alarm);
705+
g_free(alarm->command);
706+
g_free(alarm->sound_file);
707+
g_free(alarm->message);
702708
}
703709

704710
// Called every time an alarm is created or deleted

src/list-entry.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,12 @@ GList* alarm_list_entry_list_new(const gchar* dir_uri, const gchar* supported_ty
135135
flist = g_list_append(flist, entry);
136136
}
137137
}
138+
g_object_unref(info);
138139
}
139140

140141
g_file_enumerator_close(result, NULL, NULL);
142+
g_object_unref(result);
143+
g_object_unref(dir);
141144

142145
return flist;
143146
}

src/ui.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ GtkBuilder* alarm_applet_ui_load(const char* name, AlarmApplet* applet)
2929
{
3030
GtkBuilder* builder = NULL;
3131
GError* error = NULL;
32-
char* filename;
32+
gchar* filename;
3333

3434
filename = alarm_applet_get_data_path(name);
3535

@@ -228,7 +228,13 @@ void alarm_applet_ui_init(AlarmApplet* applet)
228228

229229
/* Load CSS */
230230
GtkCssProvider* css = gtk_css_provider_new();
231-
gtk_css_provider_load_from_path(css, alarm_applet_get_data_path("alarm-clock.css"), NULL);
231+
gchar* css_filename = alarm_applet_get_data_path("alarm-clock.css");
232+
233+
gtk_css_provider_load_from_path(css, css_filename, NULL);
234+
235+
g_free(css_filename);
236+
css_filename = NULL;
237+
232238
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(css), GTK_STYLE_PROVIDER_PRIORITY_USER);
233239

234240
/* Connect signals */

src/util.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,9 @@ gboolean is_executable_valid(gchar* executable)
112112
/*
113113
* Get full path to a data file
114114
*/
115-
char* alarm_applet_get_data_path(const char* name)
115+
gchar* alarm_applet_get_data_path(const char* name)
116116
{
117-
char* filename;
117+
gchar* filename;
118118

119119
/* Try the file in the source tree first */
120120
filename = g_build_filename("..", "data", name, NULL);
@@ -166,9 +166,8 @@ guint unblock_signal_handlers_by_name(gpointer instance, const gchar* signal_nam
166166
guint block_list(GList* instances, gpointer func)
167167
{
168168
guint blocked = 0;
169-
GList* l = NULL;
170169

171-
for(l = instances; l != NULL; l = l->next) {
170+
for(GList* l = instances; l != NULL; l = l->next) {
172171
blocked += BLOCK(l->data, func);
173172
}
174173

@@ -178,9 +177,8 @@ guint block_list(GList* instances, gpointer func)
178177
guint unblock_list(GList* instances, gpointer func)
179178
{
180179
guint unblocked = 0;
181-
GList* l = NULL;
182180

183-
for(l = instances; l != NULL; l = l->next) {
181+
for(GList* l = instances; l != NULL; l = l->next) {
184182
unblocked += UNBLOCK(l->data, func);
185183
}
186184

src/util.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ gboolean command_run(const gchar* command);
3232
gboolean is_executable_valid(gchar* executable);
3333

3434
/* Get full path of a data file */
35-
char* alarm_applet_get_data_path(const char* name);
35+
gchar* alarm_applet_get_data_path(const char* name);
3636

3737
guint block_signal_handlers_by_name(gpointer instance, const gchar* signal_name);
3838

0 commit comments

Comments
 (0)