Add non-closing lwevent_free()

This commit is contained in:
Laurence Withers 2007-11-05 10:29:41 +00:00
parent cfcea63f7a
commit 27133a87ed
2 changed files with 34 additions and 2 deletions

View File

@ -47,11 +47,11 @@ struct lwevent* lwevent_new(int fd, int events, lwevent_callback callback)
/* lwevent_free() /* lwevent_free_and_close()
* Mark `ev' as invalid, closing its file descriptor and calling the destructor (if there is one). * Mark `ev' as invalid, closing its file descriptor and calling the destructor (if there is one).
* If the object is already invalid, or is null, do nothing. * If the object is already invalid, or is null, do nothing.
*/ */
void lwevent_free(struct lwevent* ev) void lwevent_free_and_close(struct lwevent* ev)
{ {
if(!ev || ev->fd == -1) return; if(!ev || ev->fd == -1) return;
@ -63,6 +63,24 @@ void lwevent_free(struct lwevent* ev)
/* lwevent_free()
* Mark `ev' as invalid, calling the destructor (if there is one). If the object is already
* invalid, or is null, do nothing. Also remove `ev->fd' from epoll's consideration.
*/
void lwevent_free(struct lwevent* ev)
{
int dummy;
if(!ev || ev->fd == -1) return;
/* call destructor, deregister from epoll, mark as invalid */
if(ev->dtor) ev->dtor(ev);
dummy = lwevent_deactivate(ev);
_lwevent_invalid(ev);
}
/* lwevent_deactivate() /* lwevent_deactivate()
* Temporarily deactivate `ev'. Calls epoll_ctl(EPOLL_CTL_DEL). * Temporarily deactivate `ev'. Calls epoll_ctl(EPOLL_CTL_DEL).
*/ */

View File

@ -98,6 +98,20 @@ without consequence. At the end of the event loop, once no more callbacks are qu
objects are freed. This means that you cannot continue to refer to invalid objects after a completed objects are freed. This means that you cannot continue to refer to invalid objects after a completed
call to lwevent_wait(). call to lwevent_wait().
*/
void lwevent_free_and_close(struct lwevent* ev);
/*! \brief Free an event structure.
\param ev Event structure. May be 0.
This function will call the registered destructor of \a ev (see \ref fdparams) and free any memory
used by \a ev. It may be called at any time in the event loop. If called with a null argument, it is
a no-op. The file descriptor associated with \a ev is not modified (but it is deregistered from the
event loop).
*/ */
void lwevent_free(struct lwevent* ev); void lwevent_free(struct lwevent* ev);