Timer: new implementation (merge finished, tests failing)

This commit is contained in:
o9000
2017-12-28 22:45:20 +01:00
parent 0911dcaed1
commit f64cf199e4
18 changed files with 112 additions and 118 deletions

View File

@@ -58,10 +58,17 @@ err:
free(output_name);
}
static void crash(int sig)
{
kill(getpid(), SIGSEGV);
}
__attribute__((noreturn))
static void run_test_child(TestListItem *item)
{
reset_signals();
struct sigaction sa = {.sa_handler = crash};
sigaction(SIGINT, &sa, 0);
redirect_test_output(item->name);
bool result = true;
item->test(&result);
@@ -120,6 +127,8 @@ static Status run_test(TestListItem *item)
pid_t pid = fork();
if (pid == 0)
run_test_child(item);
struct sigaction sa = {.sa_handler = SIG_IGN};
sigaction(SIGINT, &sa, 0);
return run_test_parent(item, pid);
}

View File

@@ -41,19 +41,17 @@ void cleanup_timers()
void init_timer(Timer *timer, const char *name)
{
if (g_list_find(timers, timer)) {
fprintf(stderr, RED "tint2: Attempt to init the same timer twice: %s" RESET "\n", timer->name_);
return;
}
bzero(timer, sizeof(*timer));
strncpy(timer->name_, name, sizeof(timer->name_));
timers = g_list_append(timers, timer);
if (!g_list_find(timers, timer)) {
timers = g_list_append(timers, timer);
}
}
void destroy_timer(Timer *timer)
{
if (!g_list_find(timers, timer)) {
fprintf(stderr, RED "tint2: Attempt to destroy unexisting timer: %s" RESET "\n", timer->name_);
fprintf(stderr, RED "tint2: Attempt to destroy nonexisting timer: %s" RESET "\n", timer->name_);
return;
}
timers = g_list_remove(timers, timer);
@@ -62,8 +60,8 @@ void destroy_timer(Timer *timer)
void change_timer(Timer *timer, bool enabled, int delay_ms, int period_ms, TimerCallback *callback, void *arg)
{
if (!g_list_find(timers, timer)) {
fprintf(stderr, RED "tint2: Attempt to change unexisting timer: %s" RESET "\n", timer->name_);
return;
fprintf(stderr, RED "tint2: Attempt to change unknown timer" RESET "\n");
init_timer(timer, "unknown");
}
timer->enabled_ = enabled;
timer->expiration_time_ = get_time() + delay_ms / 1000.;
@@ -121,8 +119,9 @@ void handle_expired_timers()
timer->handled_ = false;
}
bool triggered = false;
bool triggered;
do {
triggered = false;
for (GList *it = current_timers; it; it = it->next) {
Timer *timer = (Timer *)it->data;
// Check that it is still registered.

View File

@@ -35,6 +35,10 @@ typedef struct {
bool handled_;
} Timer;
#define DEFAULT_TIMER {"", 0, 0, 0, 0, 0, 0}
#define INIT_TIMER(t) init_timer(&t, #t)
// Initialize the timer module.
void default_timers();