diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-02-12 14:25:26 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-02-12 14:25:26 +0200 |
commit | 05f16374d677f7c606d5100df3ca3499b9891aca (patch) | |
tree | efa6177f87df2ba1e9f63edec6cc55cb621c9745 /src/comp.c | |
parent | d9d267052215f223897af18310e4adee310308e7 (diff) | |
download | pies-05f16374d677f7c606d5100df3ca3499b9891aca.tar.gz pies-05f16374d677f7c606d5100df3ca3499b9891aca.tar.bz2 |
Improve progman API (progman_foreach and progman_stop_component).
* src/progman.c (progman_foreach): Allow filter to remove its prog
argument from the list. Return integer (result of the call
to filter, that returned non-zero). All uses changed.
(progman_running_count): Remove.
(progman_stop_component): Take a pointer to
pointer. Pass it to destroy_prog when needed. All uses changed.
* src/comp.c (prog_is_leftover): New function.
(cb_terminate_prog): Use prog_is_leftover. Don't raise CF_DISABLED
flag, as prog will have been destroyed by progman_stop_component.
(cb_kill_prog): Use prog_is_leftover.
* src/ctl.c (fun_stop): Check if prog still exists after the
call to progman_stop_component.
* src/pies.h (progman_running_count): Removed.
* src/prog.h (progman_foreach): Return int.
(progman_stop_component): Change signature.
Diffstat (limited to 'src/comp.c')
-rw-r--r-- | src/comp.c | 20 |
1 files changed, 13 insertions, 7 deletions
@@ -352,3 +352,11 @@ component_config_rollback (void) | |||
352 | } | 352 | } |
353 | |||
354 | /* Return true if PROG is a leftover from previous configuration */ | ||
355 | static int | ||
356 | prog_is_leftover (struct prog *prog) | ||
357 | { | ||
358 | return IS_COMPONENT (prog) && !component_is_active (prog->v.p.comp); | ||
359 | } | ||
353 | 360 | ||
361 | /* If PROG is a leftover, gracefully stop it and mark as disabled */ | ||
354 | static int | 362 | static int |
@@ -356,7 +364,4 @@ cb_terminate_prog (struct prog *prog, void *data) | |||
356 | { | 364 | { |
357 | if (IS_COMPONENT (prog) && !component_is_active (prog->v.p.comp)) | 365 | if (prog_is_leftover (prog)) |
358 | { | 366 | progman_stop_component (&prog); |
359 | progman_stop_component (prog); | ||
360 | prog->v.p.comp->flags |= CF_DISABLED; | ||
361 | } | ||
362 | return 0; | 367 | return 0; |
@@ -364,2 +369,3 @@ cb_terminate_prog (struct prog *prog, void *data) | |||
364 | 369 | ||
370 | /* If PROG is a leftover, slay it with SIGKILL */ | ||
365 | static int | 371 | static int |
@@ -367,3 +373,3 @@ cb_kill_prog (struct prog *prog, void *data) | |||
367 | { | 373 | { |
368 | if (!(IS_COMPONENT (prog) && component_is_active (prog->v.p.comp))) | 374 | if (prog_is_leftover (prog)) |
369 | prog_stop (prog, SIGKILL); | 375 | prog_stop (prog, SIGKILL); |
@@ -511,3 +517,3 @@ component_config_commit (void) | |||
511 | } | 517 | } |
512 | 518 | ||
513 | /* Build dependency map */ | 519 | /* Build dependency map */ |