Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

signal_destroy.c

Go to the documentation of this file.
00001 /*
00002 ** Copyright (C) 2005 by Kevin L. Mitchell <klmitch@mit.edu>
00003 **
00004 ** This program is free software; you can redistribute it and/or modify
00005 ** it under the terms of the GNU General Public License as published by
00006 ** the Free Software Foundation; either version 2 of the License, or
00007 ** (at your option) any later version.
00008 **
00009 ** This program is distributed in the hope that it will be useful,
00010 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 ** GNU General Public License for more details.
00013 **
00014 ** You should have received a copy of the GNU General Public License
00015 ** along with this program; if not, write to the Free Software
00016 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 **
00018 ** @(#)$Id: signal_destroy.c,v 1.1 2005/09/15 18:14:11 klmitch Exp $
00019 */
00027 #include "engines_int.h"
00028 
00029 RCSTAG("@(#)$Id: signal_destroy.c,v 1.1 2005/09/15 18:14:11 klmitch Exp $");
00030 
00031 ev_err_t
00032 signal_destroy(ev_ctx_t *ctx, ev_sig_t *sig)
00033 {
00034   ev_engine_t *eng;
00035   ev_err_t err = 0, err2;
00036 
00037   ev_init(); /* make sure library is initialized... */
00038 
00039   /* sanity-check the arguments... */
00040   if (!ec_verify(ctx) || !si_verify(sig) || eg_context(sig) != ctx)
00041     ev_return(EINVAL);
00042 
00043   if (eg_flags(sig) & EV_GEN_DELETED) /* skip already deleted signals */
00044     ev_return(0);
00045 
00046   /* Walk through all the signal engines (last to first)... */
00047   for (eng = ctx->ec_signal.el_last; eng;
00048        eng = eng->eng_signal.esi_active.el_prev)
00049     if ((err2 = eng_sig_rem(ctx, eng, sig)) && !err) /* remove the signal... */
00050       err = err2; /* don't interrupt removal, but remember error code */
00051 
00052   eg_flags_set(sig, EV_GEN_DELETED); /* mark it as deleted */
00053 
00054   /* decrement the reference count */
00055   eg_ref_dec(ctx, sig);
00056 
00057   ev_return(err);
00058 }

Generated on Wed Dec 28 23:36:56 2005 for event by  doxygen 1.4.4