From: Stefan Metzmacher Date: Tue, 23 May 2023 04:38:27 +0000 (+0200) Subject: tevent: Flow: store cancel function name in tevent_req X-Git-Tag: tevent-0.15.0~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=85e43e70b200d25e0b4afc0f9611ddae014af5cc;p=thirdparty%2Fsamba.git tevent: Flow: store cancel function name in tevent_req Note the tevent-0.14.1.sigs changes will be reverted in the 'tevent 0.15.0' commit. Signed-off-by: Stefan Metzmacher Reviewed-by: Pavel Filipenský --- diff --git a/lib/tevent/ABI/tevent-0.14.1.sigs b/lib/tevent/ABI/tevent-0.14.1.sigs index 908d7ffcf9d..9be4dafcd1e 100644 --- a/lib/tevent/ABI/tevent-0.14.1.sigs +++ b/lib/tevent/ABI/tevent-0.14.1.sigs @@ -23,6 +23,7 @@ _tevent_req_nomem: bool (const void *, struct tevent_req *, const char *) _tevent_req_notify_callback: void (struct tevent_req *, const char *) _tevent_req_oom: void (struct tevent_req *, const char *) _tevent_req_set_callback: void (struct tevent_req *, tevent_req_fn, const char *, void *) +_tevent_req_set_cancel_fn: void (struct tevent_req *, tevent_req_cancel_fn, const char *) _tevent_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) _tevent_threaded_schedule_immediate: void (struct tevent_threaded_context *, struct tevent_immediate *, tevent_immediate_handler_t, void *, const char *, const char *) tevent_abort: void (struct tevent_context *, const char *) diff --git a/lib/tevent/tevent.h b/lib/tevent/tevent.h index 5958fa6213f..b59c5792606 100644 --- a/lib/tevent/tevent.h +++ b/lib/tevent/tevent.h @@ -1182,6 +1182,11 @@ typedef bool (*tevent_req_cancel_fn)(struct tevent_req *req); * @param[in] fn A pointer to the cancel function. */ void tevent_req_set_cancel_fn(struct tevent_req *req, tevent_req_cancel_fn fn); +void _tevent_req_set_cancel_fn(struct tevent_req *req, + tevent_req_cancel_fn fn, + const char *fn_name); +#define tevent_req_set_cancel_fn(req, fn) \ + _tevent_req_set_cancel_fn(req, fn, #fn) #ifdef DOXYGEN /** diff --git a/lib/tevent/tevent_internal.h b/lib/tevent/tevent_internal.h index db0c4a9d965..d8b07eba26d 100644 --- a/lib/tevent/tevent_internal.h +++ b/lib/tevent/tevent_internal.h @@ -75,7 +75,10 @@ struct tevent_req { * that is called when the tevent_req_cancel() function * was called. */ - tevent_req_cancel_fn private_cancel; + struct { + tevent_req_cancel_fn fn; + const char *fn_name; + } private_cancel; /** * @brief A function to cleanup the request diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index a677f437cdd..0681f3c46d2 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -28,6 +28,7 @@ #include "tevent_util.h" #undef tevent_req_set_callback +#undef tevent_req_set_cancel_fn char *tevent_req_default_print(struct tevent_req *req, TALLOC_CTX *mem_ctx) { @@ -306,7 +307,8 @@ void tevent_req_received(struct tevent_req *req) talloc_set_destructor(req, NULL); req->private_print = NULL; - req->private_cancel = NULL; + req->private_cancel.fn = NULL; + req->private_cancel.fn_name = NULL; TALLOC_FREE(req->internal.trigger); TALLOC_FREE(req->internal.timer); @@ -413,16 +415,24 @@ void tevent_req_set_print_fn(struct tevent_req *req, tevent_req_print_fn fn) void tevent_req_set_cancel_fn(struct tevent_req *req, tevent_req_cancel_fn fn) { - req->private_cancel = fn; + _tevent_req_set_cancel_fn(req, fn, NULL); +} + +void _tevent_req_set_cancel_fn(struct tevent_req *req, + tevent_req_cancel_fn fn, + const char *fn_name) +{ + req->private_cancel.fn = fn; + req->private_cancel.fn_name = fn != NULL ? fn_name : NULL; } bool _tevent_req_cancel(struct tevent_req *req, const char *location) { - if (req->private_cancel == NULL) { + if (req->private_cancel.fn == NULL) { return false; } - return req->private_cancel(req); + return req->private_cancel.fn(req); } void tevent_req_set_cleanup_fn(struct tevent_req *req, tevent_req_cleanup_fn fn)