7 Commits
Author SHA1 Message Date
Joachim Nilsson 951f959549 Bump version for v2.1.2 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-02-27 00:08:54 +01:00
Joachim Nilsson a2900279f6 Update ChangeLog for v2.1.2 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-02-27 00:06:26 +01:00
Joachim Nilsson f9c9f24afb debian/: Fix minor packaging issues between base and -dev .debs
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-02-27 00:05:45 +01:00
Joachim Nilsson ab05f71bbc Fix #17: Check for existence of AM_PROG_AR macro
This patch facilitates building newer versions of libuEv on systems with
older versions of autoconf and automake.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-02-26 22:30:44 +01:00
Joachim Nilsson 856546f4c7 Refactor, simplify
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-01-28 21:36:47 +01:00
Joachim Nilsson 748ebc998c Minor, whitespace
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-01-28 21:17:43 +01:00
Joachim Nilsson 0e97bfdc5a tests/: Return result of tests, not return value of uev_run()
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2018-01-28 16:32:38 +01:00
11 changed files with 81 additions and 36 deletions

No files matched your search

+16 -1
View File
@@ -3,6 +3,20 @@ Change Log
All notable changes to the project are documented in this file. All notable changes to the project are documented in this file.
[v2.1.2][] - 2018-02-27
-----------------------
### Changes
- Minor refactor of event loop after fixing the nasty use-after-free bug
in v2.1.1. Code can now be collapsed and noticeably simplified
### Fixes
- Issue #17: Check if `AM_PROG_AR` macro exists before calling it, fixes
problem building libuEv on systems with older autoconf + automake.
Patch by Markus Svilans
- Fix minor issue with unit tests, return result of test not event loop
[v2.1.1][] - 2018-01-28 [v2.1.1][] - 2018-01-28
----------------------- -----------------------
@@ -336,7 +350,8 @@ v0.0.1 - 2012-03-17
Lua users mailing list. Lua users mailing list.
[UNRELEASED]: https://github.com/troglobit/libuev/compare/v2.1.1...HEAD [UNRELEASED]: https://github.com/troglobit/libuev/compare/v2.1.2...HEAD
[v2.1.2]: https://github.com/troglobit/libuev/compare/v2.1.1...v2.1.2
[v2.1.1]: https://github.com/troglobit/libuev/compare/v2.1.0...v2.1.1 [v2.1.1]: https://github.com/troglobit/libuev/compare/v2.1.0...v2.1.1
[v2.1.0]: https://github.com/troglobit/libuev/compare/v2.0.0...v2.1.0 [v2.1.0]: https://github.com/troglobit/libuev/compare/v2.0.0...v2.1.0
[v2.0.0]: https://github.com/troglobit/libuev/compare/v1.6.0...v2.0.0 [v2.0.0]: https://github.com/troglobit/libuev/compare/v1.6.0...v2.0.0
+2 -2
View File
@@ -1,4 +1,4 @@
AC_INIT(libuev, 2.1.1, https://github.com/troglobit/libuev/issues) AC_INIT(libuev, 2.1.2, https://github.com/troglobit/libuev/issues)
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz]) AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
AM_SILENT_RULES([yes]) AM_SILENT_RULES([yes])
@@ -8,7 +8,7 @@ AC_CONFIG_FILES([Makefile src/libuev.pc src/Makefile examples/Makefile tests/Mak
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
AC_PROG_CC AC_PROG_CC
AM_PROG_AR m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
LT_INIT LT_INIT
# Optional features # Optional features
+10
View File
@@ -1,3 +1,13 @@
libuev (2.1.2) unstable; urgency=medium
* Minor bugfix release
- Fix #17: build problem on systems with too old autoconf + automake
- Fix unit tests, return result of test not result of event loop
- Refactor/simplify/collapse main event loop code after fixes in v2.1.1
* Fix minor packaging issues
-- Joachim Nilsson <troglobit@gmail.com> Tue, 27 Feb 2018 00:05:32 +0100
libuev (2.1.1) unstable; urgency=medium libuev (2.1.1) unstable; urgency=medium
* Minor bugfix release * Minor bugfix release
+1 -4
View File
@@ -1,6 +1,3 @@
usr/include/uev/uev.h usr/include/uev/*.h
usr/include/uev/private.h
usr/include/uev/queue.h
usr/lib/*/lib*.a usr/lib/*/lib*.a
usr/lib/*/lib*.so
usr/lib/*/pkgconfig/lib*.pc usr/lib/*/pkgconfig/lib*.pc
+1 -1
View File
@@ -1 +1 @@
usr/lib/*/lib*.so.* usr/lib/*/lib*.so*
+3 -8
View File
@@ -347,6 +347,8 @@ int uev_run(uev_ctx_t *ctx, int flags)
if (!w->u.t.period) if (!w->u.t.period)
w->u.t.timeout = 0; w->u.t.timeout = 0;
if (!w->u.t.timeout)
uev_timer_stop(w);
break; break;
case UEV_CRON_TYPE: case UEV_CRON_TYPE:
@@ -362,16 +364,9 @@ int uev_run(uev_ctx_t *ctx, int flags)
w->u.c.when = 0; w->u.c.when = 0;
else else
w->u.c.when += w->u.c.interval; w->u.c.when += w->u.c.interval;
break;
}
if (UEV_CRON_TYPE == w->type) {
if (!w->u.c.when) if (!w->u.c.when)
uev_timer_stop(w); uev_timer_stop(w);
} break;
if (UEV_TIMER_TYPE == w->type) {
if (!w->u.t.timeout)
uev_timer_stop(w);
} }
/* /*
+7
View File
@@ -52,3 +52,10 @@ int main(void)
return uev_run(&ctx, 0); return uev_run(&ctx, 0);
} }
/**
* Local Variables:
* indent-tabs-mode: t
* c-file-style: "linux"
* End:
*/
+4 -4
View File
@@ -82,7 +82,7 @@ static void pipe_read_cb(uev_t *w, void UNUSED(*arg), int events)
return; return;
} }
/* Kick watchdog */ /* Kick watchdog */
if (watchdog) if (watchdog)
uev_timer_set(watchdog, 1000, 0); uev_timer_set(watchdog, 1000, 0);
@@ -112,9 +112,9 @@ static void pipe_write_cb(uev_t *w, void *arg, int UNUSED(events))
/* Here we *must* use out, not w->fd, since we're a timer callback */ /* Here we *must* use out, not w->fd, since we're a timer callback */
if (write(out, msg, my->counter) < 0) { if (write(out, msg, my->counter) < 0) {
perror("\nFailed writing to pipe"); perror("\nFailed writing to pipe");
return; return;
} }
// fprintf(stderr, "WRITE %.*s %d\n", my->counter, msg, my->counter); // fprintf(stderr, "WRITE %.*s %d\n", my->counter, msg, my->counter);
fprintf(stderr, "%d ", my->counter); fprintf(stderr, "%d ", my->counter);
+9 -2
View File
@@ -28,6 +28,7 @@
#define TIMEOUT 2 #define TIMEOUT 2
#define INTERVAL 2 #define INTERVAL 2
int result = -1;
struct timeval tv; struct timeval tv;
static void cron_job(uev_t *w, void *UNUSED(arg), int events) static void cron_job(uev_t *w, void *UNUSED(arg), int events)
@@ -45,12 +46,15 @@ static void cron_job(uev_t *w, void *UNUSED(arg), int events)
printf("Cron job HELO %s", ctime(&now.tv_sec)); printf("Cron job HELO %s", ctime(&now.tv_sec));
fail_unless(now.tv_sec == tv.tv_sec); fail_unless(now.tv_sec == tv.tv_sec);
if (!laps--) if (!laps--) {
result = 0;
uev_exit(w->ctx); uev_exit(w->ctx);
}
} }
int main(void) int main(void)
{ {
int rc;
uev_t cron_watcher; uev_t cron_watcher;
uev_ctx_t ctx; uev_ctx_t ctx;
time_t when, interval; time_t when, interval;
@@ -66,7 +70,10 @@ int main(void)
interval = INTERVAL; interval = INTERVAL;
uev_cron_init(&ctx, &cron_watcher, cron_job, NULL, when, interval); uev_cron_init(&ctx, &cron_watcher, cron_job, NULL, when, interval);
return uev_run(&ctx, 0); rc = uev_run(&ctx, 0);
fail_unless(result == 0);
return rc;
} }
/** /**
+13 -13
View File
@@ -63,7 +63,7 @@ static int callback(arg_t *arg, int event, void *foo)
printf("child: segfaulting failed!\n"); printf("child: segfaulting failed!\n");
#endif #endif
return 42; return 42;
} }
static void sigsegv_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events)) static void sigsegv_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
@@ -74,27 +74,27 @@ static void sigsegv_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
static void sigchld_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events)) static void sigchld_cb(uev_t *UNUSED(w), void *UNUSED(arg), int UNUSED(events))
{ {
pid_t pid = waitpid(-1, NULL, WNOHANG); pid_t pid = waitpid(-1, NULL, WNOHANG);
if (-1 != pid) if (-1 != pid)
warnx("PID %d exited, bye.", pid); warnx("PID %d exited, bye.", pid);
} }
static void work_cb(uev_t *UNUSED(w), void *arg, int UNUSED(events)) static void work_cb(uev_t *UNUSED(w), void *arg, int UNUSED(events))
{ {
int status = 0; int status = 0;
pid_t pid; pid_t pid;
pid = fork(); pid = fork();
if (-1 == pid) if (-1 == pid)
err(1, "fork"); err(1, "fork");
if (!pid) { if (!pid) {
status = callback(arg, 6137, NULL); status = callback(arg, 6137, NULL);
exit(status); exit(status);
} }
if (waitpid(pid, &status, 0) == -1) if (waitpid(pid, &status, 0) == -1)
err(1, "waitpid"); err(1, "waitpid");
if (WIFEXITED(status)) if (WIFEXITED(status))
printf("Child exited normally => %d\n", WEXITSTATUS(status)); printf("Child exited normally => %d\n", WEXITSTATUS(status));
@@ -108,7 +108,7 @@ static void work_cb(uev_t *UNUSED(w), void *arg, int UNUSED(events))
static void exit_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events)) static void exit_cb(uev_t *w, void *UNUSED(arg), int UNUSED(events))
{ {
printf("Process deadline reached, exiting!\n"); printf("Process deadline reached, exiting!\n");
uev_exit(w->ctx); uev_exit(w->ctx);
} }
+15 -1
View File
@@ -3,6 +3,8 @@
#include <sys/time.h> #include <sys/time.h>
#define TIMEOUT 2 /* 2 sec */ #define TIMEOUT 2 /* 2 sec */
int result = -1;
struct timeval start; struct timeval start;
static void cb(uev_t *w, void *UNUSED(arg), int events) static void cb(uev_t *w, void *UNUSED(arg), int events)
@@ -15,11 +17,13 @@ static void cb(uev_t *w, void *UNUSED(arg), int events)
gettimeofday(&now, NULL); gettimeofday(&now, NULL);
fail_unless(now.tv_sec == start.tv_sec + TIMEOUT); fail_unless(now.tv_sec == start.tv_sec + TIMEOUT);
result = 0;
uev_exit(w->ctx); uev_exit(w->ctx);
} }
int main(void) int main(void)
{ {
int rc;
uev_t w; uev_t w;
uev_ctx_t ctx; uev_ctx_t ctx;
@@ -27,5 +31,15 @@ int main(void)
uev_timer_init(&ctx, &w, cb, NULL, TIMEOUT * 1000, 0); uev_timer_init(&ctx, &w, cb, NULL, TIMEOUT * 1000, 0);
gettimeofday(&start, NULL); gettimeofday(&start, NULL);
return uev_run(&ctx, 0); rc = uev_run(&ctx, 0);
fail_unless(result == 0);
return rc;
} }
/**
* Local Variables:
* indent-tabs-mode: t
* c-file-style: "linux"
* End:
*/