summaryrefslogtreecommitdiff
path: root/src/timers.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/timers.c')
-rw-r--r--src/timers.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/src/timers.c b/src/timers.c
index cba0716..8e42050 100644
--- a/src/timers.c
+++ b/src/timers.c
@@ -1,6 +1,7 @@
/* timers.c
Copyright (C) 1999-2003 Tom Gilbert.
+Copyright (C) 2010-2020 Birte Kristina Friesel.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
@@ -57,7 +58,37 @@ double feh_get_time(void)
return((double) timev.tv_sec + (((double) timev.tv_usec) / 1000000));
}
-void feh_remove_timer(char *name)
+void feh_remove_timer_by_data(void *data)
+{
+ fehtimer ft, ptr, pptr;
+
+ D(("removing timer for %p\n", data));
+ pptr = NULL;
+ ptr = first_timer;
+ while (ptr) {
+ D(("Stepping through event list\n"));
+ ft = ptr;
+ if (ft->data == data) {
+ D(("Found it. Removing\n"));
+ if (pptr)
+ pptr->next = ft->next;
+ else
+ first_timer = ft->next;
+ if (ft->next)
+ ft->next->in += ft->in;
+ if (ft->name)
+ free(ft->name);
+ if (ft)
+ free(ft);
+ return;
+ }
+ pptr = ptr;
+ ptr = ptr->next;
+ }
+ return;
+}
+
+static void feh_remove_timer(char *name)
{
fehtimer ft, ptr, pptr;
@@ -87,6 +118,7 @@ void feh_remove_timer(char *name)
return;
}
+
void feh_add_timer(void (*func) (void *data), void *data, double in, char *name)
{
fehtimer ft, ptr, pptr;
@@ -94,7 +126,7 @@ void feh_add_timer(void (*func) (void *data), void *data, double in, char *name)
D(("adding timer %s for %f seconds time\n", name, in));
feh_remove_timer(name);
- ft = malloc(sizeof(_fehtimer));
+ ft = emalloc(sizeof(_fehtimer));
ft->next = NULL;
ft->func = func;
ft->data = data;
@@ -102,7 +134,6 @@ void feh_add_timer(void (*func) (void *data), void *data, double in, char *name)
ft->just_added = 1;
ft->in = in;
D(("ft->in = %f\n", ft->in));
- tally = 0.0;
if (!first_timer) {
D(("No first timer\n"));
first_timer = ft;