From 336c54e9ac84da7f91e6a980f14cb45f1f5c65ef Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 24 Apr 2014 13:43:59 +1000 Subject: [PATCH] 3818. [bug] Stop lying to the optimizer that 'void *arg' is a constant in isc_event_allocate. (cherry picked from commit e916c4f840e6f05c1137a2653b4ef70a1056bf74) --- CHANGES | 3 +++ lib/isc/event.c | 21 ++++++++++++++++++++- lib/isc/include/isc/event.h | 5 ++++- 3 files changed, 27 insertions(+), 2 deletions(-) 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. *