1
1
openmpi/orte/test/system/evpri-test.c
Ralph Castain bd8b4f7f1e Sorry for mid-day commit, but I had promised on the call to do this upon my return.
Roll in the ORTE state machine. Remove last traces of opal_sos. Remove UTK epoch code.

Please see the various emails about the state machine change for details. I'll send something out later with more info on the new arch.

This commit was SVN r26242.
2012-04-06 14:23:13 +00:00

109 строки
2.5 KiB
C

#include <event2/event.h>
#include <event2/event_struct.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <stdbool.h>
#define SIGPRI 0
#define TERMPRI 1
static struct event_base *base;
static bool run=true;
static int loops=0;
static void
cbfunc(evutil_socket_t fd, short what, void *arg)
{
fprintf(stderr, "CAUGHT SIGNAL\n");
fflush(stderr);
#if 0
event_base_loopbreak(base);
#endif
run = false;
}
static void
die(const char *msg)
{
fprintf(stderr, "%s\n", msg);
fflush(stderr);
exit(1);
}
static void
t1func(evutil_socket_t fd, short what, void *arg)
{
struct event *t1 = (struct event*)arg;
struct event *t2;
fprintf(stderr, "CAUGHT EVENT\n");
fflush(stderr);
event_del(t1);
free(t1);
loops++;
if (loops < 10) {
t2 = (struct event*)malloc(sizeof(struct event));
if (event_assign(t2, base, -1, EV_WRITE, t1func, t2) < 0) {
die("event_assign_term");
}
if (event_priority_set(t2, TERMPRI) < 0) {
die("event_priority_set_term");
}
fprintf(stderr, "EVENT %d DEFINED\n", loops);
fflush(stderr);
event_active(t2, EV_WRITE, 1);
fprintf(stderr, "EVENT %d ACTIVATED\n", loops);
fflush(stderr);
}
}
int
main(int argc, char **argv)
{
struct event ev;
struct event *t1;
event_enable_debug_mode();
fprintf(stderr, "Libevent %s\n", event_get_version());
fflush(stderr);
if (!(base = event_base_new()))
die("event_base_new");
if (event_base_priority_init(base, 8) < 0)
die("event_base_priority_init");
if (event_assign(&ev, base, SIGTERM, EV_SIGNAL|EV_PERSIST, cbfunc, NULL)<0)
die("event_assign");
if (event_priority_set(&ev, SIGPRI) < 0)
die("event_priority_set");
if (event_add(&ev, NULL) < 0)
die("event_add");
fprintf(stderr, "SIGNAL EVENT DEFINED\n");
fflush(stderr);
t1 = (struct event*)malloc(sizeof(struct event));
if (event_assign(t1, base, -1, EV_WRITE, t1func, t1) < 0) {
die("event_assign_term");
}
if (event_priority_set(t1, TERMPRI) < 0) {
die("event_priority_set_term");
}
event_active(t1, EV_WRITE, 1);
fprintf(stderr, "FIRST TERMINATION EVENT DEFINED\n");
fflush(stderr);
/* event_dispatch(base); */
while (run) {
event_base_loop(base, EVLOOP_ONCE);
}
fprintf(stderr, "EXITED LOOP - FREEING BASE\n");
fflush(stderr);
event_base_free(base);
return 0;
}