diff options
author | Alexandra Ellwood <lxs@mit.edu> | 2008-08-22 16:44:22 +0000 |
---|---|---|
committer | Alexandra Ellwood <lxs@mit.edu> | 2008-08-22 16:44:22 +0000 |
commit | fc539b7d38ff1dcf0f28fb76edf8bcdbbed99dea (patch) | |
tree | 1329765ab9b34cce48a594ca2f0490859d29f55d /src/ccapi | |
parent | 853980601f2ab7553ac4b19f7faee872abe9a367 (diff) | |
download | krb5-fc539b7d38ff1dcf0f28fb76edf8bcdbbed99dea.zip krb5-fc539b7d38ff1dcf0f28fb76edf8bcdbbed99dea.tar.gz krb5-fc539b7d38ff1dcf0f28fb76edf8bcdbbed99dea.tar.bz2 |
CCAPI is leaking mach ports
Need to destroy the mach ports instead of deallocating because
we requested notifications on the port so just deallocating
won't actually destroy the port. Also deallocate any port
which was previously registered for notifications.
ticket: new
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@20688 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/ccapi')
-rw-r--r-- | src/ccapi/lib/mac/ccapi_os_ipc.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/ccapi/lib/mac/ccapi_os_ipc.c b/src/ccapi/lib/mac/ccapi_os_ipc.c index f905621..2fabb19 100644 --- a/src/ccapi/lib/mac/ccapi_os_ipc.c +++ b/src/ccapi/lib/mac/ccapi_os_ipc.c @@ -240,7 +240,11 @@ cc_int32 cci_os_ipc (cc_int32 in_launch_server, err = mach_port_request_notification (mach_task_self (), reply_port, MACH_NOTIFY_NO_SENDERS, 1, reply_port, MACH_MSG_TYPE_MAKE_SEND_ONCE, - &old_notification_target ); + &old_notification_target); + + if (!err && old_notification_target != MACH_PORT_NULL) { + mach_port_deallocate (mach_task_self (), old_notification_target); + } } if (!err) { @@ -263,7 +267,7 @@ cc_int32 cci_os_ipc (cc_int32 in_launch_server, pthread_setspecific (g_reply_stream_key, NULL); pthread_setspecific (g_server_died_key, NULL); - if (MACH_PORT_VALID (reply_port)) { mach_port_deallocate (mach_task_self (), reply_port); } + if (reply_port != MACH_PORT_NULL) { mach_port_destroy (mach_task_self (), reply_port); } if (ool_request_length ) { vm_deallocate (mach_task_self (), (vm_address_t) ool_request, ool_request_length); } if (reply_stream ) { cci_stream_release (reply_stream); } |