Merge lp:~robert-ancell/lightdm/memory-leaks into lp:lightdm

Proposed by Robert Ancell
Status: Merged
Approved by: Robert Ancell
Approved revision: 1917
Merged at revision: 1914
Proposed branch: lp:~robert-ancell/lightdm/memory-leaks
Merge into: lp:lightdm
Diff against target: 188 lines (+46/-9)
7 files modified
common/configuration.c (+12/-1)
common/dmrc.c (+4/-2)
common/user-list.c (+3/-1)
src/display-server.c (+15/-0)
src/process.c (+2/-1)
src/session.c (+1/-1)
src/x-server-local.c (+9/-3)
To merge this branch: bzr merge lp:~robert-ancell/lightdm/memory-leaks
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
Robert Ancell Approve
Review via email: mp+209570@code.launchpad.net

Commit message

Fix small leaks detected by valgrind

To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
1916. By Robert Ancell

Plug display server name leak

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
1917. By Robert Ancell

Fix leaks in users objects

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'common/configuration.c'
2--- common/configuration.c 2014-02-04 22:55:32 +0000
3+++ common/configuration.c 2014-03-06 02:40:32 +0000
4@@ -37,7 +37,10 @@
5
6 key_file = g_key_file_new ();
7 if (!g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, error))
8+ {
9+ g_key_file_free (key_file);
10 return FALSE;
11+ }
12
13 groups = g_key_file_get_groups (key_file, NULL);
14 for (i = 0; groups[i]; i++)
15@@ -50,12 +53,20 @@
16 break;
17
18 for (j = 0; keys[j]; j++)
19- g_key_file_set_value (config->priv->key_file, groups[i], keys[j], g_key_file_get_value (key_file, groups[i], keys[j], NULL));
20+ {
21+ gchar *value;
22+
23+ value = g_key_file_get_value (key_file, groups[i], keys[j], NULL);
24+ g_key_file_set_value (config->priv->key_file, groups[i], keys[j], value);
25+ g_free (value);
26+ }
27
28 g_strfreev (keys);
29 }
30 g_strfreev (groups);
31
32+ g_key_file_free (key_file);
33+
34 return TRUE;
35 }
36
37
38=== modified file 'common/dmrc.c'
39--- common/dmrc.c 2014-02-04 22:55:32 +0000
40+++ common/dmrc.c 2014-03-06 02:40:32 +0000
41@@ -85,6 +85,7 @@
42 /* Update the .dmrc cache */
43 cache_dir = config_get_string (config_get_instance (), "LightDM", "cache-directory");
44 dmrc_cache_dir = g_build_filename (cache_dir, "dmrc", NULL);
45+ g_free (cache_dir);
46 if (g_mkdir_with_parents (dmrc_cache_dir, 0700) < 0)
47 g_warning ("Failed to make DMRC cache directory %s: %s", dmrc_cache_dir, strerror (errno));
48
49@@ -92,7 +93,8 @@
50 path = g_build_filename (dmrc_cache_dir, filename, NULL);
51 g_file_set_contents (path, data, length, NULL);
52
53+ g_free (data);
54+ g_free (path);
55+ g_free (filename);
56 g_free (dmrc_cache_dir);
57- g_free (path);
58- g_free (filename);
59 }
60
61=== modified file 'common/user-list.c'
62--- common/user-list.c 2014-02-08 22:33:57 +0000
63+++ common/user-list.c 2014-03-06 02:40:32 +0000
64@@ -778,7 +778,7 @@
65 CommonUser *user;
66
67 g_debug ("Session %s removed", path);
68- priv->sessions = g_list_remove_link (priv->sessions, link);
69+ priv->sessions = g_list_delete_link (priv->sessions, link);
70 user = get_user_by_name (user_list, session->username);
71 if (user)
72 g_signal_emit (user, user_signals[CHANGED], 0);
73@@ -1630,7 +1630,9 @@
74 g_free (priv->shell);
75 g_free (priv->image);
76 g_free (priv->background);
77+ g_free (priv->language);
78 g_strfreev (priv->layouts);
79+ g_free (priv->session);
80 }
81
82 static void
83
84=== modified file 'src/display-server.c'
85--- src/display-server.c 2013-08-14 20:14:16 +0000
86+++ src/display-server.c 2014-03-06 02:40:32 +0000
87@@ -152,14 +152,29 @@
88 }
89
90 static void
91+display_server_finalize (GObject *object)
92+{
93+ DisplayServer *self;
94+
95+ self = DISPLAY_SERVER (object);
96+
97+ g_free (self->priv->name);
98+
99+ G_OBJECT_CLASS (display_server_parent_class)->finalize (object);
100+}
101+
102+static void
103 display_server_class_init (DisplayServerClass *klass)
104 {
105+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
106+
107 klass->get_can_share = display_server_real_get_can_share;
108 klass->get_vt = display_server_real_get_vt;
109 klass->start = display_server_real_start;
110 klass->connect_session = display_server_real_connect_session;
111 klass->disconnect_session = display_server_real_disconnect_session;
112 klass->stop = display_server_real_stop;
113+ object_class->finalize = display_server_finalize;
114
115 g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
116
117
118=== modified file 'src/process.c'
119--- src/process.c 2014-03-05 22:34:53 +0000
120+++ src/process.c 2014-03-06 02:40:32 +0000
121@@ -240,8 +240,9 @@
122 execvp (argv[0], argv);
123 _exit (EXIT_FAILURE);
124 }
125-
126+
127 close (log_fd);
128+ g_strfreev (argv);
129 g_free (env_keys);
130 g_free (env_values);
131
132
133=== modified file 'src/session.c'
134--- src/session.c 2014-02-25 22:12:22 +0000
135+++ src/session.c 2014-03-06 02:40:32 +0000
136@@ -319,7 +319,7 @@
137 return;
138
139 g_free (link->data);
140- session->priv->env = g_list_remove_link (session->priv->env, link);
141+ session->priv->env = g_list_delete_link (session->priv->env, link);
142 }
143
144 void
145
146=== modified file 'src/x-server-local.c'
147--- src/x-server-local.c 2014-02-25 22:12:22 +0000
148+++ src/x-server-local.c 2014-03-06 02:40:32 +0000
149@@ -137,7 +137,7 @@
150 guint number = GPOINTER_TO_UINT (link->data);
151 if (number == display_number)
152 {
153- display_numbers = g_list_remove_link (display_numbers, link);
154+ display_numbers = g_list_delete_link (display_numbers, link);
155 return;
156 }
157 }
158@@ -146,15 +146,20 @@
159 XServerLocal *
160 x_server_local_new (void)
161 {
162- XServerLocal *self = g_object_new (X_SERVER_LOCAL_TYPE, NULL);
163+ XServerLocal *self;
164 gchar hostname[1024], *number, *name;
165+ XAuthority *cookie;
166+
167+ self = g_object_new (X_SERVER_LOCAL_TYPE, NULL);
168
169 x_server_set_display_number (X_SERVER (self), x_server_local_get_unused_display_number ());
170
171 gethostname (hostname, 1024);
172 number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (self)));
173- x_server_set_authority (X_SERVER (self), x_authority_new_cookie (XAUTH_FAMILY_LOCAL, (guint8*) hostname, strlen (hostname), number));
174+ cookie = x_authority_new_cookie (XAUTH_FAMILY_LOCAL, (guint8*) hostname, strlen (hostname), number);
175+ x_server_set_authority (X_SERVER (self), cookie);
176 g_free (number);
177+ g_object_unref (cookie);
178
179 name = g_strdup_printf ("x-%d", x_server_get_display_number (X_SERVER (self)));
180 display_server_set_name (DISPLAY_SERVER (self), name);
181@@ -555,6 +560,7 @@
182 g_free (self->priv->command);
183 g_free (self->priv->config_file);
184 g_free (self->priv->layout);
185+ g_free (self->priv->xdg_seat);
186 g_free (self->priv->xdmcp_server);
187 g_free (self->priv->xdmcp_key);
188 g_free (self->priv->mir_id);

Subscribers

People subscribed via source and target branches