mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-07-24 16:03:05 +00:00
defect 777
fix reference counting bugs in aispoll git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@773 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
parent
4bbecc618f
commit
092c1eff1a
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user