]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Synchronize the isc_trampoline API with changes needed in v9_16
authorOndřej Surý <ondrej@isc.org>
Tue, 31 Aug 2021 17:25:07 +0000 (17:25 +0000)
committerMichał Kępień <michal@isc.org>
Wed, 1 Sep 2021 08:44:21 +0000 (10:44 +0200)
This commit synchronizes the isc_trampoline API to match the changes
needed to fix Windows service in v9_16.

lib/isc/trampoline.c
lib/isc/trampoline_p.h

index 5d0429dfe954b504eba0cea46ccbe38599dcd74c..e254aea4113b8a05caa9d5a662b87c9b5d88ae84 100644 (file)
@@ -143,8 +143,8 @@ done:
        return (trampoline);
 }
 
-static void
-trampoline_put(isc__trampoline_t *trampoline) {
+void
+isc__trampoline_detach(isc__trampoline_t *trampoline) {
        LOCK(&isc__trampoline_lock);
        REQUIRE(trampoline->tid > 0 &&
                (size_t)trampoline->tid < isc__trampoline_max);
@@ -163,11 +163,8 @@ trampoline_put(isc__trampoline_t *trampoline) {
        return;
 }
 
-isc_threadresult_t
-isc__trampoline_run(isc_threadarg_t arg) {
-       isc__trampoline_t *trampoline = (isc__trampoline_t *)arg;
-       isc_threadresult_t result;
-
+void
+isc__trampoline_attach(isc__trampoline_t *trampoline) {
        REQUIRE(trampoline->tid > 0 &&
                (size_t)trampoline->tid < isc__trampoline_max);
        REQUIRE(trampoline->self == ISC__TRAMPOLINE_UNUSED);
@@ -175,11 +172,19 @@ isc__trampoline_run(isc_threadarg_t arg) {
        /* Initialize the trampoline */
        isc_tid_v = trampoline->tid;
        trampoline->self = isc_thread_self();
+}
+
+isc_threadresult_t
+isc__trampoline_run(isc_threadarg_t arg) {
+       isc__trampoline_t *trampoline = (isc__trampoline_t *)arg;
+       isc_threadresult_t result;
+
+       isc__trampoline_attach(trampoline);
 
        /* Run the main function */
        result = (trampoline->start)(trampoline->arg);
 
-       trampoline_put(trampoline);
+       isc__trampoline_detach(trampoline);
 
        return (result);
 }
index 0543ce67f3f95244054fd1874bfa0434ee21baa5..cfd9c948d80a74e0bdb825af297aed065c3489f8 100644 (file)
@@ -63,6 +63,17 @@ isc__trampoline_get(isc_threadfunc_t start_routine, isc_threadarg_t arg);
  *\li  'start_routine' is a valid non-NULL thread start_routine
  */
 
+void
+isc__trampoline_attach(isc__trampoline_t *trampoline);
+void
+isc__trampoline_detach(isc__trampoline_t *trampoline);
+/*%<
+ * Attach/detach the trampoline to/from the current thread.
+ *
+ * Requires:
+ * \li  'trampoline' is a valid isc__trampoline_t
+ */
+
 isc_threadresult_t
 isc__trampoline_run(isc_threadarg_t arg);
 /*%<