mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxl: poll: Use poller_get and poller_put for poller_app
This makes the code more regular. We are going to want to do some more work in poller_get and poller_put, which work also wants to be done for poller_app. Two very minor functional changes: * We call malloc an extra time since poller_app is now a pointer * ERROR_FAIL on poller_get failing for poller_app is generated in libxl_ctx_init rather than passed through by libxl_poller_init from libxl__pipe_nonblock. Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com> CC: Jim Fehlig <jfehlig@suse.com> Acked-by: Wei Liu <wei.liu2@citrix.com> Tested-by: Jim Fehlig <jfehlig@suse.com> (cherry picked from commitaae3765206) (cherry picked from commit9f6f513eec) Conflicts: tools/libxl/libxl.c Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com> (cherry picked from commit0348c450fe)
This commit is contained in:
1 parent
dd80ee80c9
commit
856f59437b
3 files changed
+11
-6
No files matched your search
+8
-3
@@ -50,6 +50,7 @@ int libxl_ctx_alloc(libxl_ctx **pctx, int version,
|
||||
|
||||
ctx->osevent_hooks = 0;
|
||||
|
||||
ctx->poller_app = 0;
|
||||
LIBXL_LIST_INIT(&ctx->pollers_event);
|
||||
LIBXL_LIST_INIT(&ctx->pollers_idle);
|
||||
|
||||
@@ -83,8 +84,11 @@ int libxl_ctx_alloc(libxl_ctx **pctx, int version,
|
||||
rc = libxl__atfork_init(ctx);
|
||||
if (rc) goto out;
|
||||
|
||||
rc = libxl__poller_init(ctx, &ctx->poller_app);
|
||||
if (rc) goto out;
|
||||
ctx->poller_app = libxl__poller_get(ctx);
|
||||
if (!ctx->poller_app) {
|
||||
rc = ERROR_FAIL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if ( stat(XENSTORE_PID_FILE, &stat_buf) != 0 ) {
|
||||
LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "Is xenstore daemon running?\n"
|
||||
@@ -160,7 +164,8 @@ int libxl_ctx_free(libxl_ctx *ctx)
|
||||
libxl_version_info_dispose(&ctx->version_info);
|
||||
if (ctx->xsh) xs_daemon_close(ctx->xsh);
|
||||
|
||||
libxl__poller_dispose(&ctx->poller_app);
|
||||
libxl__poller_put(ctx, ctx->poller_app);
|
||||
ctx->poller_app = NULL;
|
||||
assert(LIBXL_LIST_EMPTY(&ctx->pollers_event));
|
||||
libxl__poller *poller, *poller_tmp;
|
||||
LIBXL_LIST_FOREACH_SAFE(poller, &ctx->pollers_idle, entry, poller_tmp) {
|
||||
|
||||
@@ -876,7 +876,7 @@ int libxl_osevent_beforepoll(libxl_ctx *ctx, int *nfds_io,
|
||||
{
|
||||
EGC_INIT(ctx);
|
||||
CTX_LOCK;
|
||||
int rc = beforepoll_internal(gc, &ctx->poller_app,
|
||||
int rc = beforepoll_internal(gc, ctx->poller_app,
|
||||
nfds_io, fds, timeout_upd, now);
|
||||
CTX_UNLOCK;
|
||||
EGC_FREE;
|
||||
@@ -1033,7 +1033,7 @@ void libxl_osevent_afterpoll(libxl_ctx *ctx, int nfds, const struct pollfd *fds,
|
||||
{
|
||||
EGC_INIT(ctx);
|
||||
CTX_LOCK;
|
||||
afterpoll_internal(egc, &ctx->poller_app, nfds, fds, now);
|
||||
afterpoll_internal(egc, ctx->poller_app, nfds, fds, now);
|
||||
CTX_UNLOCK;
|
||||
EGC_FREE;
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ struct libxl__ctx {
|
||||
/* See the comment for OSEVENT_HOOK_INTERN in libxl_event.c
|
||||
* for restrictions on the use of the osevent fields. */
|
||||
|
||||
libxl__poller poller_app; /* libxl_osevent_beforepoll and _afterpoll */
|
||||
libxl__poller *poller_app; /* libxl_osevent_beforepoll and _afterpoll */
|
||||
LIBXL_LIST_HEAD(, libxl__poller) pollers_event, pollers_idle;
|
||||
|
||||
LIBXL_SLIST_HEAD(libxl__osevent_hook_nexi, libxl__osevent_hook_nexus)
|
||||
|
||||