forked from enlightenment/efl
ecore: Create a lockless ecore_main_fd_handler_del
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com> SVN revision: 62374
This commit is contained in:
parent
25b0ab9ca7
commit
01e790ed40
|
@ -789,6 +789,25 @@ _ecore_main_loop_shutdown(void)
|
|||
}
|
||||
}
|
||||
|
||||
void *
|
||||
_ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler)
|
||||
{
|
||||
if (fd_handler->delete_me)
|
||||
{
|
||||
ERR("fdh %p deleted twice", fd_handler);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
_ecore_main_fdh_poll_del(fd_handler);
|
||||
fd_handler->delete_me = EINA_TRUE;
|
||||
fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fd_handler);
|
||||
if (fd_handler->prep_func && fd_handlers_with_prep)
|
||||
fd_handlers_with_prep = eina_list_remove(fd_handlers_with_prep, fd_handler);
|
||||
if (fd_handler->buf_func && fd_handlers_with_buffer)
|
||||
fd_handlers_with_buffer = eina_list_remove(fd_handlers_with_buffer, fd_handler);
|
||||
return fd_handler->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @addtogroup Ecore_Main_Loop_Group
|
||||
*
|
||||
|
@ -998,6 +1017,7 @@ ecore_main_win32_handler_add(void *h __UNUSED__, Ecore_Win32_Handle_Cb func __UN
|
|||
}
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* Deletes the given FD handler.
|
||||
* @param fd_handler The given FD handler.
|
||||
|
@ -1023,20 +1043,7 @@ ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler)
|
|||
"ecore_main_fd_handler_del");
|
||||
goto unlock;
|
||||
}
|
||||
if (fd_handler->delete_me)
|
||||
{
|
||||
ERR("fdh %p deleted twice", fd_handler);
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
_ecore_main_fdh_poll_del(fd_handler);
|
||||
fd_handler->delete_me = EINA_TRUE;
|
||||
fd_handlers_to_delete = eina_list_append(fd_handlers_to_delete, fd_handler);
|
||||
if (fd_handler->prep_func && fd_handlers_with_prep)
|
||||
fd_handlers_with_prep = eina_list_remove(fd_handlers_with_prep, fd_handler);
|
||||
if (fd_handler->buf_func && fd_handlers_with_buffer)
|
||||
fd_handlers_with_buffer = eina_list_remove(fd_handlers_with_buffer, fd_handler);
|
||||
ret = fd_handler->data;
|
||||
ret = _ecore_main_fd_handler_del(fd_handler);
|
||||
unlock:
|
||||
_ecore_unlock();
|
||||
return ret;
|
||||
|
|
|
@ -157,7 +157,7 @@ ecore_pipe_del(Ecore_Pipe *p)
|
|||
}
|
||||
p->delete_me = EINA_TRUE;
|
||||
if (p->handling > 0) return (void *)p->data;
|
||||
if (p->fd_handler) ecore_main_fd_handler_del(p->fd_handler);
|
||||
if (p->fd_handler) _ecore_main_fd_handler_del(p->fd_handler);
|
||||
if (p->fd_read != PIPE_FD_INVALID) pipe_close(p->fd_read);
|
||||
if (p->fd_write != PIPE_FD_INVALID) pipe_close(p->fd_write);
|
||||
data = (void *)p->data;
|
||||
|
@ -180,7 +180,7 @@ ecore_pipe_read_close(Ecore_Pipe *p)
|
|||
}
|
||||
if (p->fd_handler)
|
||||
{
|
||||
ecore_main_fd_handler_del(p->fd_handler);
|
||||
_ecore_main_fd_handler_del(p->fd_handler);
|
||||
p->fd_handler = NULL;
|
||||
}
|
||||
if (p->fd_read != PIPE_FD_INVALID)
|
||||
|
@ -207,7 +207,7 @@ ecore_pipe_freeze(Ecore_Pipe *p)
|
|||
}
|
||||
if (p->fd_handler)
|
||||
{
|
||||
ecore_main_fd_handler_del(p->fd_handler);
|
||||
_ecore_main_fd_handler_del(p->fd_handler);
|
||||
p->fd_handler = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -157,6 +157,8 @@ void *_ecore_event_signal_exit_new(void);
|
|||
void *_ecore_event_signal_power_new(void);
|
||||
void *_ecore_event_signal_realtime_new(void);
|
||||
|
||||
void *_ecore_main_fd_handler_del(Ecore_Fd_Handler *fd_handler);
|
||||
|
||||
void _ecore_main_shutdown(void);
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
Loading…
Reference in New Issue