diff options
| author | William Jon McCann <mccann@jhu.edu> | 2007-03-13 11:41:31 -0400 | 
|---|---|---|
| committer | William Jon McCann <mccann@jhu.edu> | 2007-03-13 11:41:31 -0400 | 
| commit | 4a639d92a6f1a5dd8f59d57ade37d4cff420b66a (patch) | |
| tree | cb6081df5fd92f3b3edd28d884e887fb4cc49424 | |
| parent | 1e7af7e9c648fb461e0d36d037d2920519159525 (diff) | |
various leak fixes
| -rw-r--r-- | src/ck-manager.c | 38 | ||||
| -rw-r--r-- | src/ck-seat.c | 15 | ||||
| -rw-r--r-- | src/ck-session.c | 32 | ||||
| -rw-r--r-- | src/main.c | 4 | 
4 files changed, 68 insertions, 21 deletions
| diff --git a/src/ck-manager.c b/src/ck-manager.c index 9b51000..8e66419 100644 --- a/src/ck-manager.c +++ b/src/ck-manager.c @@ -375,6 +375,11 @@ find_seat_for_session (CkManager *manager,                  g_free (sid);          } +        g_free (display_device); +        g_free (x11_display_device); +        g_free (x11_display); +        g_free (remote_host_name); +          return seat;  } @@ -627,6 +632,8 @@ add_param_int (GPtrArray  *parameters,                                  0, key,                                  1, &val,                                  G_MAXUINT); +        g_value_unset (&val); +          g_ptr_array_add (parameters, g_value_get_boxed (¶m_val));  } @@ -654,6 +661,8 @@ add_param_boolean (GPtrArray  *parameters,                                  0, key,                                  1, &val,                                  G_MAXUINT); +        g_value_unset (&val); +          g_ptr_array_add (parameters, g_value_get_boxed (¶m_val));  } @@ -676,6 +685,8 @@ add_param_string (GPtrArray  *parameters,                                  0, key,                                  1, &val,                                  G_MAXUINT); +        g_value_unset (&val); +          g_ptr_array_add (parameters, g_value_get_boxed (¶m_val));  } @@ -716,6 +727,7 @@ parse_output (const char *output)                  vals = g_strsplit (lines[i], " = ", 2);                  if (vals == NULL || vals[0] == NULL) { +                        g_strfreev (vals);                          continue;                  } @@ -728,6 +740,8 @@ parse_output (const char *output)                  g_strfreev (vals);          } +        g_strfreev (lines); +          return parameters;  } @@ -745,6 +759,22 @@ job_data_free (JobData *data)  }  static void +parameters_free (GPtrArray *parameters) +{ +        int i; + +        for (i = 0; i < parameters->len; i++) { +                gpointer data; +                data = g_ptr_array_index (parameters, i); +                if (data != NULL) { +                        g_boxed_free (CK_TYPE_PARAMETER_STRUCT, data); +                } +        } + +        g_ptr_array_free (parameters, TRUE); +} + +static void  job_completed (CkJob     *job,                 int        status,                 JobData   *data) @@ -765,9 +795,7 @@ job_completed (CkJob     *job,                                                           data->leader_info,                                                           parameters,                                                           data->context); - -                g_ptr_array_free (parameters, TRUE); - +                parameters_free (parameters);          }          /* remove job from queue */ @@ -886,6 +914,9 @@ create_session_for_sender (CkManager             *manager,                                                           context);          } +        g_free (cookie); +        g_free (ssid); +          return TRUE;  } @@ -1192,6 +1223,7 @@ remove_session_for_cookie (CkManager  *manager,          g_hash_table_remove (manager->priv->sessions, ssid); +        g_free (sid);          g_free (ssid);          manager_update_system_idle_hint (manager); diff --git a/src/ck-seat.c b/src/ck-seat.c index c980ad5..0b8ef80 100644 --- a/src/ck-seat.c +++ b/src/ck-seat.c @@ -527,10 +527,12 @@ ck_seat_remove_session (CkSeat         *seat,                          CkSession      *session,                          GError        **error)  { -        char *ssid; +        char    *ssid; +        gboolean ret;          g_return_val_if_fail (CK_IS_SEAT (seat), FALSE); +        ret = FALSE;          ssid = NULL;          ck_session_get_id (session, &ssid, NULL); @@ -540,8 +542,7 @@ ck_seat_remove_session (CkSeat         *seat,                               CK_SEAT_ERROR,                               CK_SEAT_ERROR_GENERAL,                               _("Session is not attached to this seat")); -                g_free (ssid); -                return FALSE; +                goto out;          }          g_signal_handlers_disconnect_by_func (session, session_activate, seat); @@ -555,7 +556,11 @@ ck_seat_remove_session (CkSeat         *seat,          /* try to change the active session */          maybe_update_active_session (seat); -        return TRUE; +        ret = TRUE; + out: +        g_free (ssid); + +        return ret;  }  gboolean @@ -582,6 +587,8 @@ ck_seat_add_session (CkSeat         *seat,          maybe_update_active_session (seat); +        g_free (ssid); +          return TRUE;  } diff --git a/src/ck-session.c b/src/ck-session.c index e513bc3..c88cbbc 100644 --- a/src/ck-session.c +++ b/src/ck-session.c @@ -1064,6 +1064,8 @@ ck_session_finalize (GObject *object)          g_free (session->priv->seat_id);          g_free (session->priv->session_type);          g_free (session->priv->x11_display); +        g_free (session->priv->display_device); +        g_free (session->priv->x11_display_device);          g_free (session->priv->remote_host_name);          G_OBJECT_CLASS (ck_session_parent_class)->finalize (object); @@ -1119,13 +1121,13 @@ ck_session_new_with_parameters (const char      *ssid,          params = g_new0 (GParameter, n_allocated_params);          n_params = 0; -        params[n_params].name = "id"; +        params[n_params].name = g_strdup ("id");          params[n_params].value.g_type = 0;          g_value_init (¶ms[n_params].value, G_TYPE_STRING);          g_value_set_string (¶ms[n_params].value, ssid);          n_params++; -        params[n_params].name = "cookie"; +        params[n_params].name = g_strdup ("cookie");          params[n_params].value.g_type = 0;          g_value_init (¶ms[n_params].value, G_TYPE_STRING);          g_value_set_string (¶ms[n_params].value, cookie); @@ -1135,7 +1137,7 @@ ck_session_new_with_parameters (const char      *ssid,                  for (i = 0; i < parameters->len; i++) {                          gboolean    res;                          GValue      val_struct = { 0, }; -                        const char *prop_name; +                        char       *prop_name;                          GValue     *prop_val;                          GParamSpec *pspec; @@ -1148,50 +1150,54 @@ ck_session_new_with_parameters (const char      *ssid,                                                        G_MAXUINT);                          if (! res) {                                  ck_debug ("Unable to extract parameter input"); -                                continue; +                                goto cont;                          }                          if (prop_name == NULL) {                                  ck_debug ("Skipping NULL parameter"); -                                continue; +                                goto cont;                          }                          if (strcmp (prop_name, "id") == 0                              || strcmp (prop_name, "cookie") == 0) {                                  ck_debug ("Skipping restricted parameter: %s", prop_name); -                                continue; +                                goto cont;                          }                          pspec = g_object_class_find_property (class, prop_name);                          if (! pspec) {                                  ck_debug ("Skipping unknown parameter: %s", prop_name); -                                if (prop_val != NULL) { -                                        g_value_unset (prop_val); -                                } -                                continue; +                                goto cont;                          }                          if (!(pspec->flags & G_PARAM_WRITABLE)) {                                  ck_debug ("property '%s' is not writable", pspec->name); -                                continue; +                                goto cont;                          } -                        params[n_params].name = prop_name; +                        params[n_params].name = g_strdup (prop_name);                          params[n_params].value.g_type = 0;                          g_value_init (¶ms[n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec));                          res = g_value_transform (prop_val, ¶ms[n_params].value);                          if (! res) {                                  ck_debug ("unable to transform property value for '%s'", pspec->name); -                                continue; +                                goto cont;                          }                          n_params++; +                cont: +                        g_free (prop_name); +                        if (prop_val != NULL) { +                                g_value_unset (prop_val); +                                g_free (prop_val); +                        }                  }          }          object = g_object_newv (object_type, n_params, params);          while (n_params--) { +                g_free ((char *)params[n_params].name);                  g_value_unset (¶ms[n_params].value);          }          g_free (params); @@ -285,13 +285,15 @@ main (int    argc,          loop = g_main_loop_new (NULL, FALSE);          if (do_timed_exit) { -                g_timeout_add (3000 * 60, (GSourceFunc) timed_exit_cb, loop); +                g_timeout_add (1000 * 30, (GSourceFunc) timed_exit_cb, loop);          }          g_main_loop_run (loop);          g_object_unref (manager); +        g_main_loop_unref (loop); +          ret = 0;   out: | 
