53 lines
1.7 KiB
Diff
53 lines
1.7 KiB
Diff
commit ccff9ed69d0b26d33ce9cac8e83dab535b64d627
|
|
Author: Thomas Markwalder <tmark@isc.org>
|
|
Date: Tue Dec 5 15:12:34 2017 -0500
|
|
|
|
[46767] Plugged a socket descriptor leak in OMAPI
|
|
|
|
If disconnect is triggered by the reader closing the socket, while there
|
|
is data left to write, the socket would be orphaned.
|
|
|
|
omapip/buffer.c
|
|
omapi_connection_writea() - added logic to recall disconnect once
|
|
pending data has been written
|
|
|
|
omapip/message.c
|
|
Removed static declaration from omapi_message_unregister so you can
|
|
actually compile when DEBUG_PROTOCOL is defined.
|
|
|
|
Added a release note
|
|
|
|
diff --git a/omapip/buffer.c b/omapip/buffer.c
|
|
index 6e0621b..a21f0a8 100644
|
|
--- a/omapip/buffer.c
|
|
+++ b/omapip/buffer.c
|
|
@@ -565,6 +565,15 @@ isc_result_t omapi_connection_writer (omapi_object_t *h)
|
|
omapi_buffer_dereference (&buffer, MDL);
|
|
}
|
|
}
|
|
+
|
|
+ /* If we had data left to write when we're told to disconnect,
|
|
+ * we need recall disconnect, now that we're done writing.
|
|
+ * See rt46767. */
|
|
+ if (c->out_bytes == 0 && c->state == omapi_connection_disconnecting) {
|
|
+ omapi_disconnect (h, 1);
|
|
+ return ISC_R_SHUTTINGDOWN;
|
|
+ }
|
|
+
|
|
return ISC_R_SUCCESS;
|
|
}
|
|
|
|
diff --git a/omapip/message.c b/omapip/message.c
|
|
index ee15d82..37abbd2 100644
|
|
--- a/omapip/message.c
|
|
+++ b/omapip/message.c
|
|
@@ -339,7 +339,7 @@ isc_result_t omapi_message_unregister (omapi_object_t *mo)
|
|
}
|
|
|
|
#ifdef DEBUG_PROTOCOL
|
|
-static const char *omapi_message_op_name(int op) {
|
|
+const char *omapi_message_op_name(int op) {
|
|
switch (op) {
|
|
case OMAPI_OP_OPEN: return "OMAPI_OP_OPEN";
|
|
case OMAPI_OP_REFRESH: return "OMAPI_OP_REFRESH";
|