aboutsummaryrefslogtreecommitdiff
path: root/contrib/isc-dhcp/omapip/message.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/isc-dhcp/omapip/message.c')
-rw-r--r--contrib/isc-dhcp/omapip/message.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/contrib/isc-dhcp/omapip/message.c b/contrib/isc-dhcp/omapip/message.c
index a073669947bb..0e97e15f7835 100644
--- a/contrib/isc-dhcp/omapip/message.c
+++ b/contrib/isc-dhcp/omapip/message.c
@@ -3,7 +3,7 @@
Subroutines for dealing with message objects. */
/*
- * Copyright (c) 1999-2000 Internet Software Consortium.
+ * Copyright (c) 1999-2003 Internet Software Consortium.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -327,6 +327,7 @@ isc_result_t omapi_message_unregister (omapi_object_t *mo)
omapi_object_reference ((omapi_object_t **)&n,
(omapi_object_t *)m -> next, MDL);
omapi_object_dereference ((omapi_object_t **)&m -> next, MDL);
+ omapi_object_dereference ((omapi_object_t **)&n -> prev, MDL);
}
if (m -> prev) {
omapi_message_object_t *tmp = (omapi_message_object_t *)0;
@@ -707,10 +708,12 @@ omapi_message_process_internal (omapi_object_t *mo, omapi_object_t *po)
status = omapi_protocol_send_status
(po, message -> id_object, ISC_R_SUCCESS,
message -> id, (char *)0);
- if (m)
+ if (m) {
omapi_signal ((omapi_object_t *)m,
"status", ISC_R_SUCCESS,
(omapi_typed_data_t *)0);
+ omapi_message_unregister ((omapi_object_t *)m);
+ }
omapi_object_dereference (&object, MDL);
@@ -743,6 +746,9 @@ omapi_message_process_internal (omapi_object_t *mo, omapi_object_t *po)
omapi_signal ((omapi_object_t *)m, "status", waitstatus, tv);
if (status == ISC_R_SUCCESS)
omapi_value_dereference (&tv, MDL);
+
+ omapi_message_unregister((omapi_object_t *)m);
+
return ISC_R_SUCCESS;
case OMAPI_OP_DELETE: