From: Steven Dake Date: Tue, 26 Jul 2005 19:43:31 +0000 (+0000) Subject: defect 777 X-Git-Tag: v1.3.0~1639 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=092c1eff1a68053f5f97c394d455ef3badc98e6a;p=mirror_corosync.git defect 777 fix reference counting bugs in aispoll git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@773 fd59a12c-fef9-0310-b244-a6a79926bd2f --- diff --git a/exec/aispoll.c b/exec/aispoll.c index fcc14117..98975343 100644 --- a/exec/aispoll.c +++ b/exec/aispoll.c @@ -104,10 +104,12 @@ int poll_destroy (poll_handle handle) { struct poll_instance *poll_instance; SaErrorT error; + int res = 0; error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; goto error_exit; } @@ -123,10 +125,8 @@ int poll_destroy (poll_handle handle) saHandleInstancePut (&poll_instance_database, handle); - return (0); - error_exit: - return (-1); + return (res); } int poll_dispatch_add ( @@ -143,10 +143,12 @@ int poll_dispatch_add ( int found = 0; int install_pos; SaErrorT error; + int res = 0; error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; goto error_exit; } @@ -165,8 +167,8 @@ int poll_dispatch_add ( (poll_instance->poll_entry_count + 1) * sizeof (struct poll_entry)); if (poll_entries == 0) { - errno = ENOMEM; - goto error_exit; + res = -ENOMEM; + goto error_put; } poll_instance->poll_entries = poll_entries; @@ -174,8 +176,8 @@ int poll_dispatch_add ( (poll_instance->poll_entry_count + 1) * sizeof (struct pollfd)); if (ufds == 0) { - errno = ENOMEM; - goto error_exit; + res = -ENOMEM; + goto error_put; } poll_instance->ufds = ufds; @@ -193,12 +195,11 @@ int poll_dispatch_add ( poll_instance->poll_entries[install_pos].dispatch_fn = dispatch_fn; poll_instance->poll_entries[install_pos].data = data; +error_put: saHandleInstancePut (&poll_instance_database, handle); - return (0); - error_exit: - return (-1); + return (res); } int poll_dispatch_modify ( @@ -211,10 +212,12 @@ int poll_dispatch_modify ( struct poll_instance *poll_instance; int i; SaErrorT error; + int res = 0; error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; goto error_exit; } @@ -226,16 +229,18 @@ int poll_dispatch_modify ( poll_instance->poll_entries[i].ufd.events = events; poll_instance->poll_entries[i].dispatch_fn = dispatch_fn; poll_instance->poll_entries[i].prio = prio; - return (0); + + goto error_put; } } - errno = EBADF; + res = -EBADF; +error_put: saHandleInstancePut (&poll_instance_database, handle); error_exit: - return (-1); + return (res); } int poll_dispatch_delete ( @@ -246,10 +251,12 @@ int poll_dispatch_delete ( int i; SaErrorT error; int found = 0; + int res = 0; error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; goto error_exit; } @@ -275,17 +282,18 @@ int poll_dispatch_delete ( } } + res = -EBADF; if (found) { poll_instance->ufds[i].fd = -1; poll_instance->ufds[i].revents = 0; + res = 0; } + saHandleInstancePut (&poll_instance_database, handle); - return (0); error_exit: - errno = EBADF; - return (-1); + return (res); } int poll_timer_add ( @@ -295,20 +303,22 @@ int poll_timer_add ( poll_timer_handle *timer_handle_out) { struct poll_instance *poll_instance; - int res = -1; + int res = 0; SaErrorT error; error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; + goto error_exit; } timerlist_add_future (&poll_instance->timerlist, timer_fn, data, msec_in_future, timer_handle_out); - if (timer_handle_out != 0) { - res = 0; + if (timer_handle_out == 0) { + res = -ENOENT; } saHandleInstancePut (&poll_instance_database, handle); @@ -322,6 +332,7 @@ int poll_timer_delete ( { struct poll_instance *poll_instance; SaErrorT error; + int res = 0; if (timer_handle == 0) { return (0); @@ -329,6 +340,7 @@ int poll_timer_delete ( error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; goto error_exit; } @@ -336,10 +348,8 @@ int poll_timer_delete ( saHandleInstancePut (&poll_instance_database, handle); - return (0); - error_exit: - return (-1); + return (res); } int poll_timer_delete_data ( @@ -347,6 +357,7 @@ int poll_timer_delete_data ( poll_timer_handle timer_handle) { struct poll_instance *poll_instance; SaErrorT error; + int res = 0; if (timer_handle == 0) { return (0); @@ -354,6 +365,7 @@ int poll_timer_delete_data ( error = saHandleInstanceGet (&poll_instance_database, handle, (void *)&poll_instance); if (error != SA_OK) { + res = -ENOENT; goto error_exit; } @@ -361,11 +373,8 @@ int poll_timer_delete_data ( saHandleInstancePut (&poll_instance_database, handle); - return (0); - error_exit: - return (-1); - + return (res); }