summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2010-06-28 17:05:23 +0200
committerKarel Klic <kklic@redhat.com>2010-06-28 17:05:23 +0200
commit89cc0327197bcff83ba24d681b15fd6dc19417a2 (patch)
tree840492c0916eac8b637f9a6dff2480361f570be0
parent2fdc17f250d228bbf1b82b069d4cb0a66af8e440 (diff)
downloadabrt-89cc0327197bcff83ba24d681b15fd6dc19417a2.tar.gz
abrt-89cc0327197bcff83ba24d681b15fd6dc19417a2.tar.xz
abrt-89cc0327197bcff83ba24d681b15fd6dc19417a2.zip
Removed some memory leaks
-rw-r--r--README9
-rw-r--r--src/Daemon/CommLayerServerDBus.cpp3
-rw-r--r--src/Daemon/Daemon.cpp34
3 files changed, 35 insertions, 11 deletions
diff --git a/README b/README
index c62fce46..26cbbcb6 100644
--- a/README
+++ b/README
@@ -1,2 +1,11 @@
These sources are in early stages. They are changing every day :-)...
Anyway, patches are welcome.
+
+** Using Valgrind
+
+When running ABRT under memcheck, GLib's environment variables should
+be set to turn off glib's memory optimization, so valgrind is not
+confused:
+
+G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind --tool=memcheck \
+ --leak-check=full abrtd -dvvv
diff --git a/src/Daemon/CommLayerServerDBus.cpp b/src/Daemon/CommLayerServerDBus.cpp
index 7fa9f26b..347278f4 100644
--- a/src/Daemon/CommLayerServerDBus.cpp
+++ b/src/Daemon/CommLayerServerDBus.cpp
@@ -597,6 +597,7 @@ CCommLayerServerDBus::CCommLayerServerDBus()
//
// and need to code up handle_message to check for "Disconnected" dbus signal
+ /* Also sets g_dbus_conn to conn. */
attach_dbus_conn_to_glib_main_loop(conn, "/com/redhat/abrt", message_received);
VERB3 log("dbus_bus_request_name");
@@ -619,5 +620,5 @@ CCommLayerServerDBus::CCommLayerServerDBus()
CCommLayerServerDBus::~CCommLayerServerDBus()
{
-// do we need to do anything here?
+ dbus_connection_unref(g_dbus_conn);
}
diff --git a/src/Daemon/Daemon.cpp b/src/Daemon/Daemon.cpp
index e9db034d..6c61d4df 100644
--- a/src/Daemon/Daemon.cpp
+++ b/src/Daemon/Daemon.cpp
@@ -682,6 +682,8 @@ static void run_main_loop(GMainLoop* loop)
if (some_ready)
g_main_context_dispatch(context);
}
+
+ g_main_context_unref(context);
}
static void start_syslog_logging()
@@ -823,8 +825,10 @@ int main(int argc, char** argv)
}
GMainLoop* pMainloop = NULL;
- GIOChannel* pGiochannel_inotify = NULL;
- GIOChannel* pGiochannel_signal = NULL;
+ GIOChannel* channel_inotify = NULL;
+ guint channel_inotify_event_id = 0;
+ GIOChannel* channel_signal = NULL;
+ guint channel_signal_event_id = 0;
bool lockfile_created = false;
bool pidfile_created = false;
CCrashWatcher watcher;
@@ -864,8 +868,11 @@ int main(int argc, char** argv)
perror_msg_and_die("inotify_add_watch failed on '%s'", g_settings_sWatchCrashdumpArchiveDir.c_str());
}
VERB1 log("Adding inotify watch to glib main loop");
- pGiochannel_inotify = g_io_channel_unix_new(inotify_fd);
- g_io_add_watch(pGiochannel_inotify, G_IO_IN, handle_inotify_cb, NULL);
+ channel_inotify = g_io_channel_unix_new(inotify_fd);
+ channel_inotify_event_id = g_io_add_watch(channel_inotify,
+ G_IO_IN,
+ handle_inotify_cb,
+ NULL);
VERB1 log("Loading plugins from "PLUGINS_LIB_DIR);
g_pPluginManager = new CPluginManager();
@@ -878,8 +885,11 @@ int main(int argc, char** argv)
/* Add an event source which waits for INT/TERM signal */
VERB1 log("Adding signal pipe watch to glib main loop");
- pGiochannel_signal = g_io_channel_unix_new(s_signal_pipe[0]);
- g_io_add_watch(pGiochannel_signal, G_IO_IN, handle_signal_cb, NULL);
+ channel_signal = g_io_channel_unix_new(s_signal_pipe[0]);
+ channel_signal_event_id = g_io_add_watch(channel_signal,
+ G_IO_IN,
+ handle_signal_cb,
+ NULL);
/* Mark the territory */
VERB1 log("Creating lock file");
@@ -951,10 +961,14 @@ int main(int argc, char** argv)
if (lockfile_created)
unlink(VAR_RUN_LOCK_FILE);
- if (pGiochannel_signal)
- g_io_channel_unref(pGiochannel_signal);
- if (pGiochannel_inotify)
- g_io_channel_unref(pGiochannel_inotify);
+ if (channel_signal_event_id > 0)
+ g_source_remove(channel_signal_event_id);
+ if (channel_signal)
+ g_io_channel_unref(channel_signal);
+ if (channel_inotify_event_id > 0)
+ g_source_remove(channel_inotify_event_id);
+ if (channel_inotify)
+ g_io_channel_unref(channel_inotify);
delete g_pCommLayer;
if (g_pPluginManager)