#ifdef atexit cleanups calling free as the OS should do this for us, but valgrind debuggers need it.
This commit is contained in:
parent
4e4c4a5bf4
commit
cb44b0a46c
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,3 @@
|
|||||||
openrc-0.1.tar.bz2
|
openrc-*.tar.bz2
|
||||||
.gdb_history
|
.gdb_history
|
||||||
.gdbinit
|
.gdbinit
|
||||||
|
2
README
2
README
@ -19,6 +19,8 @@ PREFIX=/usr/local
|
|||||||
|
|
||||||
We don't support building a static OpenRC with PAM.
|
We don't support building a static OpenRC with PAM.
|
||||||
You may need to use PROGLDFLAGS=-Wl,-Bstatic on glibc instead of just -static.
|
You may need to use PROGLDFLAGS=-Wl,-Bstatic on glibc instead of just -static.
|
||||||
|
If you debug memory under valgrind, add -DDEBUG_MEMORY to your CPPFLAGS
|
||||||
|
so that all malloc memory should be freed at exit.
|
||||||
|
|
||||||
You can also brand OpenRC if you so wish like so
|
You can also brand OpenRC if you so wish like so
|
||||||
BRANDING=\"Gentoo/$(uname -s)\"
|
BRANDING=\"Gentoo/$(uname -s)\"
|
||||||
|
@ -61,10 +61,12 @@ static RC_STRINGLIST *rc_conf = NULL;
|
|||||||
|
|
||||||
extern char** environ;
|
extern char** environ;
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
static void _free_rc_conf(void)
|
static void _free_rc_conf(void)
|
||||||
{
|
{
|
||||||
rc_stringlist_free(rc_conf);
|
rc_stringlist_free(rc_conf);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char *rc_conf_value(const char *setting)
|
char *rc_conf_value(const char *setting)
|
||||||
{
|
{
|
||||||
@ -74,7 +76,9 @@ char *rc_conf_value(const char *setting)
|
|||||||
|
|
||||||
if (! rc_conf) {
|
if (! rc_conf) {
|
||||||
rc_conf = rc_config_load(RC_CONF);
|
rc_conf = rc_config_load(RC_CONF);
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
atexit(_free_rc_conf);
|
atexit(_free_rc_conf);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Support old configs */
|
/* Support old configs */
|
||||||
if (exists(RC_CONF_OLD)) {
|
if (exists(RC_CONF_OLD)) {
|
||||||
|
23
src/rc/rc.c
23
src/rc/rc.c
@ -137,8 +137,10 @@ static void clean_failed(void)
|
|||||||
static void cleanup(void)
|
static void cleanup(void)
|
||||||
{
|
{
|
||||||
if (applet && strcmp(applet, "rc") == 0) {
|
if (applet && strcmp(applet, "rc") == 0) {
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
RC_PID *p1 = LIST_FIRST(&service_pids);
|
RC_PID *p1 = LIST_FIRST(&service_pids);
|
||||||
RC_PID *p2;
|
RC_PID *p2;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (hook_out)
|
if (hook_out)
|
||||||
rc_plugin_run(hook_out, runlevel);
|
rc_plugin_run(hook_out, runlevel);
|
||||||
@ -150,6 +152,16 @@ static void cleanup(void)
|
|||||||
free(termios_orig);
|
free(termios_orig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Clean runlevel start, stop markers */
|
||||||
|
if (! rc_in_plugin && ! rc_in_logger) {
|
||||||
|
rmdir(RC_STARTING);
|
||||||
|
rmdir(RC_STOPPING);
|
||||||
|
clean_failed();
|
||||||
|
|
||||||
|
rc_logger_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
while (p1) {
|
while (p1) {
|
||||||
p2 = LIST_NEXT(p1, entries);
|
p2 = LIST_NEXT(p1, entries);
|
||||||
free(p1);
|
free(p1);
|
||||||
@ -162,17 +174,8 @@ static void cleanup(void)
|
|||||||
rc_stringlist_free(types_n);
|
rc_stringlist_free(types_n);
|
||||||
rc_stringlist_free(types_nua);
|
rc_stringlist_free(types_nua);
|
||||||
rc_deptree_free(deptree);
|
rc_deptree_free(deptree);
|
||||||
|
|
||||||
/* Clean runlevel start, stop markers */
|
|
||||||
if (! rc_in_plugin && ! rc_in_logger) {
|
|
||||||
rmdir(RC_STARTING);
|
|
||||||
rmdir(RC_STOPPING);
|
|
||||||
clean_failed();
|
|
||||||
|
|
||||||
rc_logger_close();
|
|
||||||
}
|
|
||||||
|
|
||||||
free(runlevel);
|
free(runlevel);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,16 +327,16 @@ static void cleanup(void)
|
|||||||
start_services(restart_services);
|
start_services(restart_services);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rc_plugin_unload();
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
rc_stringlist_free(types_b);
|
rc_stringlist_free(types_b);
|
||||||
rc_stringlist_free(types_n);
|
rc_stringlist_free(types_n);
|
||||||
rc_stringlist_free(types_nu);
|
rc_stringlist_free(types_nu);
|
||||||
rc_stringlist_free(types_nua);
|
rc_stringlist_free(types_nua);
|
||||||
rc_stringlist_free(types_m);
|
rc_stringlist_free(types_m);
|
||||||
rc_stringlist_free(types_mua);
|
rc_stringlist_free(types_mua);
|
||||||
|
|
||||||
rc_plugin_unload();
|
|
||||||
rc_deptree_free(deptree);
|
rc_deptree_free(deptree);
|
||||||
|
|
||||||
rc_stringlist_free(restart_services);
|
rc_stringlist_free(restart_services);
|
||||||
rc_stringlist_free(need_services);
|
rc_stringlist_free(need_services);
|
||||||
rc_stringlist_free(use_services);
|
rc_stringlist_free(use_services);
|
||||||
@ -347,6 +347,7 @@ static void cleanup(void)
|
|||||||
free(service);
|
free(service);
|
||||||
free(prefix);
|
free(prefix);
|
||||||
free(runlevel);
|
free(runlevel);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (*mtime_test && !rc_in_plugin)
|
if (*mtime_test && !rc_in_plugin)
|
||||||
unlink(mtime_test);
|
unlink(mtime_test);
|
||||||
|
@ -116,13 +116,14 @@ static void free_schedulelist(void)
|
|||||||
TAILQ_INIT(&schedule);
|
TAILQ_INIT(&schedule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
static void cleanup(void)
|
static void cleanup(void)
|
||||||
{
|
{
|
||||||
free(changeuser);
|
free(changeuser);
|
||||||
free(nav);
|
free(nav);
|
||||||
|
|
||||||
free_schedulelist();
|
free_schedulelist();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int parse_signal(const char *sig)
|
static int parse_signal(const char *sig)
|
||||||
{
|
{
|
||||||
@ -609,7 +610,9 @@ int start_stop_daemon(int argc, char **argv)
|
|||||||
unsigned int start_wait = 0;
|
unsigned int start_wait = 0;
|
||||||
|
|
||||||
TAILQ_INIT(&schedule);
|
TAILQ_INIT(&schedule);
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
atexit(cleanup);
|
atexit(cleanup);
|
||||||
|
#endif
|
||||||
|
|
||||||
signal_setup(SIGINT, handle_signal);
|
signal_setup(SIGINT, handle_signal);
|
||||||
signal_setup(SIGQUIT, handle_signal);
|
signal_setup(SIGQUIT, handle_signal);
|
||||||
|
Loading…
Reference in New Issue
Block a user