diff --git a/CHANGES b/CHANGES index aeb76687b5..b5e3e870b0 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +3818. [bug] Stop lying to the optimizer that 'void *arg' is a + constant in isc_event_allocate. + 3815. [doc] Clarify "nsupdate -y" usage in man page. [RT #35808] 3809. [doc] Fix NSID documentation. diff --git a/lib/isc/event.c b/lib/isc/event.c index 8ab75240dc..2f08277939 100644 --- a/lib/isc/event.c +++ b/lib/isc/event.c @@ -41,7 +41,26 @@ destroy(isc_event_t *event) { isc_event_t * isc_event_allocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type, - isc_taskaction_t action, const void *arg, size_t size) + isc_taskaction_t action, void *arg, size_t size) +{ + isc_event_t *event; + + REQUIRE(size >= sizeof(struct isc_event)); + REQUIRE(action != NULL); + + event = isc_mem_get(mctx, size); + if (event == NULL) + return (NULL); + + ISC_EVENT_INIT(event, size, 0, NULL, type, action, arg, + sender, destroy, mctx); + + return (event); +} + +isc_event_t * +isc_event_constallocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type, + isc_taskaction_t action, const void *arg, size_t size) { isc_event_t *event; void *deconst_arg; diff --git a/lib/isc/include/isc/event.h b/lib/isc/include/isc/event.h index 68fabb2fcc..40e01fae40 100644 --- a/lib/isc/include/isc/event.h +++ b/lib/isc/include/isc/event.h @@ -90,7 +90,10 @@ ISC_LANG_BEGINDECLS isc_event_t * isc_event_allocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type, - isc_taskaction_t action, const void *arg, size_t size); + isc_taskaction_t action, void *arg, size_t size); +isc_event_t * +isc_event_constallocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type, + isc_taskaction_t action, const void *arg, size_t size); /*%< * Allocate an event structure. *