コード例 #1
0
ファイル: kqueue.c プロジェクト: 00datman/ompi
static int
kq_sig_del(struct event_base *base, int nsignal, short old, short events, void *p)
{
	struct kqop *kqop = base->evbase;
	struct kevent kev;

	struct timespec timeout = { 0, 0 };
	(void)p;

	EVUTIL_ASSERT(nsignal >= 0 && nsignal < NSIG);

	memset(&kev, 0, sizeof(kev));
	kev.ident = nsignal;
	kev.filter = EVFILT_SIGNAL;
	kev.flags = EV_DELETE;

	/* Because we insert signal events
	 * immediately, we need to delete them
	 * immediately, too */
	if (kevent(kqop->kq, &kev, 1, NULL, 0, &timeout) == -1)
		return (-1);

	if (_evsig_restore_handler(base, nsignal) == -1)
		return (-1);

	return (0);
}
コード例 #2
0
ファイル: signal.c プロジェクト: andyk/load_gen
void
evsig_dealloc(struct event_base *base)
{
	int i = 0;
	if (base->sig.ev_signal_added) {
		event_del(&base->sig.ev_signal);
		event_debug_unassign(&base->sig.ev_signal);
		base->sig.ev_signal_added = 0;
	}
	for (i = 0; i < NSIG; ++i) {
		if (i < base->sig.sh_old_max && base->sig.sh_old[i] != NULL)
			_evsig_restore_handler(base, i);
	}

	if (base->sig.ev_signal_pair[0] != -1) {
		EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[0]);
		base->sig.ev_signal_pair[0] = -1;
	}
	if (base->sig.ev_signal_pair[1] != -1) {
		EVUTIL_CLOSESOCKET(base->sig.ev_signal_pair[1]);
		base->sig.ev_signal_pair[1] = -1;
	}
	base->sig.sh_old_max = 0;

	/* per index frees are handled in evsig_del() */
	if (base->sig.sh_old) {
		mm_free(base->sig.sh_old);
		base->sig.sh_old = NULL;
	}
}
コード例 #3
0
ファイル: signal.c プロジェクト: andyk/load_gen
static int
evsig_del(struct event_base *base, int evsignal, short old, short events, void *p)
{
	EVUTIL_ASSERT(evsignal >= 0 && evsignal < NSIG);

	event_debug(("%s: %d: restoring signal handler", __func__, evsignal));

	return (_evsig_restore_handler(base, evsignal));
}
コード例 #4
0
ファイル: signal.c プロジェクト: avsej/libevent
static int
evsig_del(struct event_base *base, evutil_socket_t evsignal, short old, short events, void *p)
{
	EVUTIL_ASSERT(evsignal >= 0 && evsignal < NSIG);

	event_debug(("%s: %d: restoring signal handler", __func__, evsignal));

	EVSIGBASE_LOCK();
	--evsig_base_n_signals_added;
	--base->sig.ev_n_signals_added;
	EVSIGBASE_UNLOCK();

	return (_evsig_restore_handler(base, (int)evsignal));
}
コード例 #5
0
ファイル: signal.c プロジェクト: zyf873753/libevent-for-learn
void
evsig_dealloc(struct event_base *base)
{
	int i = 0;
	if (base->sig.ev_signal_added) {
		event_del(&base->sig.ev_signal);//删除信号事件
		base->sig.ev_signal_added = 0;
	}
	/* debug event is created in evsig_init/event_assign even when
	 * ev_signal_added == 0, so unassign is required */
	event_debug_unassign(&base->sig.ev_signal);

	//恢复所有的信号处理函数
	for (i = 0; i < NSIG; ++i) {
		if (i < base->sig.sh_old_max && base->sig.sh_old[i] != NULL)
			_evsig_restore_handler(base, i);
	}
	EVSIGBASE_LOCK();
	if (base == evsig_base) {
		evsig_base = NULL;
		evsig_base_n_signals_added = 0;
		evsig_base_fd = -1;
	}
	EVSIGBASE_UNLOCK();

	//关闭socketpair描述府
	if (base->sig.ev_signal_pair[0] != -1) {
		evutil_closesocket(base->sig.ev_signal_pair[0]);
		base->sig.ev_signal_pair[0] = -1;
	}
	if (base->sig.ev_signal_pair[1] != -1) {
		evutil_closesocket(base->sig.ev_signal_pair[1]);
		base->sig.ev_signal_pair[1] = -1;
	}
	base->sig.sh_old_max = 0;

	/* per index frees are handled in evsig_del() */
	if (base->sig.sh_old) {
		mm_free(base->sig.sh_old);
		base->sig.sh_old = NULL;
	}
}
コード例 #6
0
ファイル: signal.c プロジェクト: bringhurst/ompi
void
evsig_dealloc(struct event_base *base)
{
    int i = 0;
    if (base->sig.ev_signal_added) {
        event_del(&base->sig.ev_signal);
        event_debug_unassign(&base->sig.ev_signal);
        base->sig.ev_signal_added = 0;
    }

    for (i = 0; i < NSIG; ++i) {
        if (i < base->sig.sh_old_max && base->sig.sh_old[i] != NULL)
            _evsig_restore_handler(base, i);
    }
    EVSIGBASE_LOCK();
    if (base == evsig_base) {
        evsig_base = NULL;
        evsig_base_n_signals_added = 0;
        evsig_base_fd = -1;
    }
    EVSIGBASE_UNLOCK();

    if (base->sig.ev_signal_pair[0] != -1) {
        evutil_closesocket(base->sig.ev_signal_pair[0]);
        base->sig.ev_signal_pair[0] = -1;
    }
    if (base->sig.ev_signal_pair[1] != -1) {
        evutil_closesocket(base->sig.ev_signal_pair[1]);
        base->sig.ev_signal_pair[1] = -1;
    }
    base->sig.sh_old_max = 0;

    /* per index frees are handled in evsig_del() */
    if (base->sig.sh_old) {
        mm_free(base->sig.sh_old);
        base->sig.sh_old = NULL;
    }
}