All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

Commit 608de04f authored by Robert Ricci's avatar Robert Ricci

Fix a bug relating to multiple handles - the cleanup function should

only be called after we're done with _all_ handles. So, add a simple
count of how many handles we've given out, and only call cleanup on
the last one to get unregistered.
parent 17d1b0d2
......@@ -32,6 +32,12 @@
static char hostname[MAXHOSTNAMELEN];
static char ipaddr[32];
/*
* Count of how many handles are in use, so that we can avoid cleaning up until
* the last one is unregistered
*/
static int handles_in_use = 0;
/*
* Register with the testbed event system. NAME specifies the name of
* the event server. Returns a pointer to a handle that may be passed
......@@ -158,6 +164,11 @@ event_register(char *name, int threaded)
handle->server = server;
handle->status = status;
/*
* Keep track of how many handles we have outstanding
*/
handles_in_use++;
return handle;
}
......@@ -184,6 +195,8 @@ event_unregister(event_handle_t handle)
return 0;
}
TRACE("disconnect completed\n");
/* Clean up: */
if (elvin_handle_free(handle->server, handle->status) == 0) {
......@@ -191,12 +204,21 @@ event_unregister(event_handle_t handle)
elvin_error_fprintf(stderr, handle->status);
return 0;
}
if (handle->cleanup(1, handle->status) == 0) {
ERROR("could not clean up Elvin state: ");
elvin_error_fprintf(stderr, handle->status);
return 0;
TRACE("free completed\n");
if (handles_in_use == 1) {
if (handle->cleanup(1, handle->status) == 0) {
ERROR("could not clean up Elvin state: ");
elvin_error_fprintf(stderr, handle->status);
return 0;
}
TRACE("cleanup completed\n");
}
handles_in_use--;
free(handle);
return 1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment