示例#1
0
文件: timer.c 项目: 9thsector/ccnet
CcnetTimer*
ccnet_timer_new (TimerCB         func,
                 void           *user_data,
                 uint64_t        interval_milliseconds)
{
    CcnetTimer *timer = g_new0 (CcnetTimer, 1);

    timer->tv = timeval_from_msec (interval_milliseconds);
    timer->func = func;
    timer->user_data = user_data;

    evtimer_set (&timer->event, timer_callback, timer);
    evtimer_add (&timer->event, &timer->tv);

    return timer;
}
示例#2
0
文件: ob.c 项目: ellzey/dotfiles
void
send_byte(int sock, short event, void * arg) {
    char           fbyte;
    struct timeval tv;

    if (fread(&fbyte, 1, 1, input_file) == 1) {
        printf("sending: '%c' (%x)\n", isprint(fbyte) ? fbyte : ' ', fbyte);

        evbuffer_add(bufferevent_get_output(bev), &fbyte, 1);

        tv.tv_sec  = sec;
        tv.tv_usec = usec;

        evtimer_add(sev, &tv);
    }
}
示例#3
0
文件: timer.cpp 项目: jb55/libcage
        void
        timer::set_timer(callback *func, timeval *t)
        {
                typedef boost::shared_ptr<event> ev_ptr;
                ev_ptr ev = ev_ptr(new event);

                // delete old event
                unset_timer(func);

                func->m_timer = this;

                // add new event
                m_events[func] = ev;
                evtimer_set(ev.get(), timer_callback, func);
                evtimer_add(ev.get(), t);
        }
示例#4
0
文件: stats.c 项目: hyper/rqd
void stats_start(stats_t *stats)
{
	struct timeval t = {.tv_sec = 1, .tv_usec = 0};
	system_data_t *sysdata;
	
	assert(stats);
	assert(stats->stats_event == NULL);
	assert(stats->sysdata);

	sysdata = stats->sysdata;
	assert(sysdata->evbase);
		
	stats->stats_event = evtimer_new(sysdata->evbase, stats_handler, (void *) stats);
	evtimer_add(stats->stats_event, &t);
	assert(stats->stats_event);
}
示例#5
0
文件: gp_layer.c 项目: eusafe/libgate
void gp_get_dev_logs(int fd, short event, void *arg) {
	evutil_timerclear(&gp_cfg.scan_log_interval);
	gp_cfg.scan_log_interval.tv_sec=5;
 	if ( evtimer_add(&gp_cfg.ev_scan_log, &gp_cfg.scan_log_interval) < 0) syslog(LOG_ERR, "event_add.evkeep setup: %m");
//	fprintf(stderr, "Get logs from all devs.\n");
	
	int i=0, gp_dst;
	for(gp_dst=1;gp_dst<=gp_cfg.max_dev_n;i++,gp_dst++) {
		if( devices[gp_dst].activ == 1 ) {
//			ad_get_token_bound(AD_Q_SECOND, gp_dst, NULL);
			ad_get_buff_addr(AD_Q_SECOND, gp_dst, &cb_log_read );
//			cmd_log_read(gp_dst, , &cb_log_read);
		}
	}
	return;
}
示例#6
0
static int update_conn_event_sleep(struct connection *c)
{
    struct timeval t = {.tv_sec = 0, .tv_usec = 0};
    struct timeval now;
    if (event_del(&c->ev) == -1) return 0;

    c->ev_flags = 0; // clear event flags in case we ping-pong to other modes
    evtimer_set(&c->ev, sleep_handler, (void *)c);
    event_base_set(c->t->base, &c->ev);

    gettimeofday(&now, NULL);

    // every time we come into this loop, we've run once. which means we
    // always have to advance the next_sleep timer.
    if (c->next_sleep.tv_sec == 0) {
        // initialize next_sleep as late as possible to avoid spamming.
        gettimeofday(&c->next_sleep, NULL);
    }
    memcpy(&t, &c->next_sleep, sizeof(struct timeval));
    timeradd(&t, &c->tosleep, &c->next_sleep);

    timersub(&c->next_sleep, &now, &t);
    // so far as I can tell, it treats times in the past as "Wake up
    // immediately".
    evtimer_add(&c->ev, &t);

    return 1;
}

/* TODO: Be more wary of IOV_MAX */
static void drain_iovecs(struct iovec *vecs, const int iov_count, const int written) {
    int i;
    int todrain = written;
    for (i = 0; i < iov_count; i++) {
        if (vecs[i].iov_len > 0) {
            if (todrain >= vecs[i].iov_len) {
                todrain -= vecs[i].iov_len;
                vecs[i].iov_base = NULL;
                vecs[i].iov_len  = 0;
            } else {
                vecs[i].iov_len -= todrain;
                vecs[i].iov_base += todrain;
                break;
            }
        }
    }
}
示例#7
0
/* ARGSUSED */
void
control_accept(int listenfd, short event, void *arg)
{
	int			 connfd;
	socklen_t		 len;
	struct sockaddr_un	 sun;
	struct ctl_conn		*c;
	struct control_sock	*cs = arg;

	event_add(&cs->cs_ev, NULL);
	if ((event & EV_TIMEOUT))
		return;

	len = sizeof(sun);
	if ((connfd = accept4(listenfd,
	    (struct sockaddr *)&sun, &len, SOCK_NONBLOCK)) == -1) {
		/*
		 * Pause accept if we are out of file descriptors, or
		 * libevent will haunt us here too.
		 */
		if (errno == ENFILE || errno == EMFILE) {
			struct timeval evtpause = { 1, 0 };

			event_del(&cs->cs_ev);
			evtimer_add(&cs->cs_evt, &evtpause);
		} else if (errno != EWOULDBLOCK && errno != EINTR &&
		    errno != ECONNABORTED)
			log_warn("%s: accept", __func__);
		return;
	}

	if ((c = calloc(1, sizeof(struct ctl_conn))) == NULL) {
		close(connfd);
		log_warn("%s: calloc", __func__);
		return;
	}

	imsg_init(&c->iev.ibuf, connfd);
	c->iev.handler = control_dispatch_imsg;
	c->iev.events = EV_READ;
	c->iev.data = cs;	/* proc.c cheats (reuses the handler) */
	event_set(&c->iev.ev, c->iev.ibuf.fd, c->iev.events,
	    c->iev.handler, cs);
	event_add(&c->iev.ev, NULL);

	TAILQ_INSERT_TAIL(&ctl_conns, c, entry);
}
示例#8
0
/* ARGSUSED */
void
control_accept(int listenfd, short event, void *bula)
{
	int			 connfd;
	socklen_t		 len;
	struct sockaddr_un	 sun;
	struct ctl_conn		*c;

	event_add(&control_state.ev, NULL);
	if ((event & EV_TIMEOUT))
		return;

	len = sizeof(sun);
	if ((connfd = accept(listenfd,
	    (struct sockaddr *)&sun, &len)) == -1) {
		/*
		 * Pause accept if we are out of file descriptors, or
		 * libevent will haunt us here too.
		 */
		if (errno == ENFILE || errno == EMFILE) {
			struct timeval evtpause = { 1, 0 };

			event_del(&control_state.ev);
			evtimer_add(&control_state.evt, &evtpause);
		} else if (errno != EWOULDBLOCK && errno != EINTR &&
		    errno != ECONNABORTED)
			log_warn("control_accept: accept");
		return;
	}

	session_socket_blockmode(connfd, BM_NONBLOCK);

	if ((c = calloc(1, sizeof(struct ctl_conn))) == NULL) {
		log_warn("control_accept");
		close(connfd);
		return;
	}

	imsg_init(&c->iev.ibuf, connfd);
	c->iev.handler = control_dispatch_imsg;
	c->iev.events = EV_READ;
	event_set(&c->iev.ev, c->iev.ibuf.fd, c->iev.events,
	    c->iev.handler, &c->iev);
	event_add(&c->iev.ev, NULL);

	TAILQ_INSERT_TAIL(&ctl_conns, c, entry);
}
示例#9
0
static void dns_cb(int errcode, struct evutil_addrinfo *addr, void *ptr)
{
	struct tmate_ssh_client *client;
	struct evutil_addrinfo *ai;
	struct timeval tv;

	if (errcode) {
		tmate_status_message("%s lookup failure. Retrying in %d seconds (%s)",
				     TMATE_HOST, TMATE_DNS_RETRY_TIMEOUT,
				     evutil_gai_strerror(errcode));

		tv.tv_sec = TMATE_DNS_RETRY_TIMEOUT;
		tv.tv_usec = 0;

		evtimer_assign(&ev_dns_retry, ev_base, on_dns_retry, NULL);
		evtimer_add(&ev_dns_retry, &tv);

		return;
	}

	tmate_status_message("Connecting to %s...", TMATE_HOST);

	for (ai = addr; ai; ai = ai->ai_next) {
		char buf[128];
		const char *ip = NULL;
		if (ai->ai_family == AF_INET) {
			struct sockaddr_in *sin = (struct sockaddr_in *)ai->ai_addr;
			ip = evutil_inet_ntop(AF_INET, &sin->sin_addr, buf, 128);
		} else if (ai->ai_family == AF_INET6) {
			struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)ai->ai_addr;
			ip = evutil_inet_ntop(AF_INET6, &sin6->sin6_addr, buf, 128);
		}

		tmate_debug("Trying server %s", ip);

		/*
		 * Note: We don't deal with the client list. Clients manage it
		 * and free client structs when necessary.
		 */
		(void)tmate_ssh_client_alloc(&tmate_session, ip);
	}

	evutil_freeaddrinfo(addr);

	evdns_base_free(ev_dnsbase, 0);
	ev_dnsbase = NULL;
}
示例#10
0
static void
c_service_validity_timer(evutil_socket_t fd UNUSED, short event UNUSED,
                         void *arg)
{ 
    mul_service_t *service = arg;
    struct timeval tv = { 5, 0 };

    if (service->conn.dead) return;

    if (!mul_service_alive(service)) {
        c_log_err("%s: service died", service->service_name);
        return c_service_reconnect(service);
    }

    if (service->valid_timer_event)
        evtimer_add(service->valid_timer_event, &tv);
}
示例#11
0
void 
HeartbeatEventSource::afterObservers( const int arg1, short int which )
{
    struct timeval CLOCK_TV;
    struct timeval NEW_TV;
    struct timeval TIMER_TV = {1, 0};

    //std::cout << "TimerEventSource::afterObservers" << std::endl;

    // Get the current time.
    if( gettimeofday( &CLOCK_TV, NULL ) ) 
    {
        perror("gettimeofday()");
        event_loopbreak();
    }

    //printf( "timer cb: %d, %d\n", CLOCK_TV.tv_sec, CLOCK_TV.tv_usec );

    // Calculate the time to the next 100ms boundary
    NEW_TV.tv_usec = ( ( CLOCK_TV.tv_usec / 1000 ) * 1000 ) + 1000;
    NEW_TV.tv_sec  = CLOCK_TV.tv_sec;

    while( NEW_TV.tv_usec >= 1000000 )
    {
        NEW_TV.tv_usec -= 1000000;
        NEW_TV.tv_sec  += 1;
    }

    //printf( "new time: %d, %d\n", NEW_TV.tv_sec, NEW_TV.tv_usec );

    if( NEW_TV.tv_usec == 0 )
    {
        TIMER_TV.tv_sec  = NEW_TV.tv_sec  - CLOCK_TV.tv_sec - 1;
        TIMER_TV.tv_usec = 1000000 - CLOCK_TV.tv_usec;
    }
    else
    {
        TIMER_TV.tv_sec  = NEW_TV.tv_sec  - CLOCK_TV.tv_sec;
        TIMER_TV.tv_usec = NEW_TV.tv_usec - CLOCK_TV.tv_usec;
    }

    //printf( "new inc: %d, %d\n", TIMER_TV.tv_sec, TIMER_TV.tv_usec );

    // Wake up again in a little bit.
    evtimer_add( getEventPtr(), &TIMER_TV );
}
示例#12
0
static enum command_state
update_trigger(void *arg, int *retval)
{
  short *events = arg;

  ++deferred_update_notifications;
  deferred_update_events |= *events;

  // Only add the timer event if the update occurred outside a (init-/re-/fullre-) scan.
  // The scanning functions take care of notifying clients of database changes directly
  // after the scan finished.
  if (!scanning)
    evtimer_add(updateev, &library_update_wait);

  *retval = 0;
  return COMMAND_END;
}
示例#13
0
/**
 * @name c_app_reconn_timer
 * @brief Timer which is invoked once main controller connection goes down
 *        and it retries till connection is restored 
 */
static void
c_app_reconn_timer(evutil_socket_t fd UNUSED, short event UNUSED,
                   void *arg)
{ 
    c_app_hdl_t *hdl = arg;
    struct timeval tv = { 2, 0 };

    if(!c_app_sock_init(hdl, server)) {
        c_log_debug("Connection to controller restored");
        event_del((struct event *)(hdl->reconn_timer_event));
        event_free((struct event *)(hdl->reconn_timer_event));
        c_app_notify_reconnect(hdl);
        return;
    }

    evtimer_add(hdl->reconn_timer_event, &tv);
}
示例#14
0
static void
slowdata_cb(evhtp_request_t * req, void * arg) {
    /* Init our slow data vars */
    slow_data_bytes = 0;

    /* Start the reply */
    evhtp_send_reply_chunk_start(req, EVHTP_RES_OK);

    /* Create a timer for this request */
    timer_event = evtimer_new(evbase, slowdata_timer_cb, req);

    /* Set the timer and exit. */
    struct timeval tv;
    tv.tv_sec   = 0;
    tv.tv_usec  = 500000;
    evtimer_add(timer_event, &tv);
}
示例#15
0
static void
timerCallback( int fd      UNUSED,
               short event UNUSED,
               void *      vtimer )
{
    int               more;
    struct tr_timer * timer = vtimer;

    timer->inCallback = 1;
    more = ( *timer->func )( timer->user_data );
    timer->inCallback = 0;

    if( more )
        evtimer_add( &timer->event, &timer->tv );
    else
        tr_timerFree( &timer );
}
示例#16
0
static void
rrdtool_restart(int fd, short what, void *arg)
{
	struct rrdtool_drv *drv = arg;
	struct timeval tv;

	/* Terminate the bugger */
	if (drv->fd != -1) {
		close(drv->fd);
		drv->fd = -1;
	}
	if (drv->pid != 0) {
		kill(drv->pid, SIGTERM);
		drv->pid = 0;
	}

	/* If we respawn too quickly, we need to wait a little whilte */
	gettimeofday(&tv, NULL);
	timersub(&tv, &drv->tv_started, &tv);
	if (tv.tv_sec < 5) {
		syslog(LOG_NOTICE, "Respawing rrdtool too quickly");
		tv.tv_sec = 5;
		tv.tv_usec = 0;
		evtimer_add(&drv->ev_timeout, &tv);
		return;
	}

	/* Bad hack - we need to disable all events */
	bufferevent_disable(drv->evb, EV_READ|EV_WRITE);

	if (rrdtool_fork(drv) == -1) {
		syslog(LOG_WARNING, "Terminating rrdtool driver.");
		rrdtool_free(drv);
	} else {
		struct rrdtool_command *cmd = TAILQ_FIRST(&drv->commands);

		/* This is yet another bad hack */
		drv->evb->ev_read.ev_fd = drv->fd;
		drv->evb->ev_write.ev_fd = drv->fd;
		bufferevent_enable(drv->evb, EV_WRITE);

		/* Restart the last command */
		if (cmd != NULL)
			rrdtool_write_command(drv, cmd->command);
	}
}
示例#17
0
文件: rub.c 项目: github188/Ptl
static void create_base()
{
	signal(SIGINT,sig_int);
//	strTag->pid = getpid();
	struct event_base *base = event_base_new();
	struct timeval tv = {5,0};
	struct event sig;
	struct event timeout;
	evtimer_assign(&timeout,base,timerout1,&timeout);
	evtimer_add(&timeout,&tv);
	evsignal_assign(&sig,base,SIGUSR2,sig_act1,&sig);
	evsignal_add(&sig,NULL);
	event_base_dispatch(base);
	printf("child break loopbase!!\n");
	event_base_free(base);
	sleep(5);
}
示例#18
0
void add_safe_evtimer(PgThread* pgThread, struct event *ev, struct timeval *tv)
{
	int res;
	struct timer_slot *ts;

	Assert(pgMulThread != NULL);
	res = evtimer_add(ev, tv);
	if (res >= 0)
		return;

	if (pgThread->current_timer_backup_index >= MAX_TIMER_BACKUP_SLOT)
		fatal_perror("TIMER_BACKUP_SLOTS full");

	ts = &pgThread->timer_backup_list[pgThread->current_timer_backup_index++];
	ts->ev = ev;
	ts->tv = *tv;
}
示例#19
0
// Process Spotify events in main event loop.
void sess_event_cb(evutil_socket_t sock, short event, void *arg)
{
  (void)sock;
  (void)event;

  session_t *sess = arg;

  int timeout = 0;
  while (!timeout)
    sp_session_process_events(sess->spotify, &timeout);

  // Schedule next event.
  struct timeval tv;
  tv.tv_sec = timeout / 1000;
  tv.tv_usec = (timeout % 1000) * 1000;
  evtimer_add(sess->spot_ev, &tv);
}
示例#20
0
文件: map.c 项目: heartshare/rspamd
static void
rspamd_map_schedule_periodic (struct rspamd_map *map,
		gboolean locked, gboolean initial, gboolean errored)
{
	const gdouble error_mult = 20.0, lock_mult = 0.1;
	gdouble jittered_sec;
	gdouble timeout;
	struct map_periodic_cbdata *cbd;

	timeout = map->poll_timeout;

	if (initial) {
		timeout = 0.0;
	}

	if (errored) {
		timeout = map->poll_timeout * error_mult;
	}
	else if (locked) {
		timeout = lock_mult;
	}

	cbd = g_slice_alloc0 (sizeof (*cbd));
	cbd->cbdata.state = 0;
	cbd->cbdata.prev_data = *map->user_data;
	cbd->cbdata.cur_data = NULL;
	cbd->cbdata.map = map;
	cbd->map = map;
	REF_INIT_RETAIN (cbd, rspamd_map_periodic_dtor);

	if (initial) {
		evtimer_set (&map->ev, rspamd_map_periodic_callback, cbd);
		event_base_set (map->ev_base, &map->ev);
	}
	else {
		evtimer_del (&map->ev);
		evtimer_set (&map->ev, rspamd_map_periodic_callback, cbd);
		event_base_set (map->ev_base, &map->ev);
	}

	jittered_sec = rspamd_time_jitter (timeout, 0);
	msg_debug_map ("schedule new periodic event %p in %.2f seconds", cbd, jittered_sec);
	double_to_tv (jittered_sec, &map->tv);

	evtimer_add (&map->ev, &map->tv);
}
示例#21
0
//------------------------------------------------
// Trigger event callback starts all transactions.
//
void
trigger_cb(int fd, short event, void* pv_udata)
{
	int b = (int)(uint64_t)pv_udata;

	// Continue the current transaction phase.
	if (! (g_bases[b].trigger_phase == INSERT ?
			put(b, g_bases[b].trigger_k) : get(b, g_bases[b].trigger_k))) {
		// Will exit event loop if put/get call failed.
		return;
	}

	// Advance the key index.
	g_bases[b].trigger_k += g_config.num_bases;

	// Check whether the current phase is done.
	if (g_bases[b].trigger_k >= g_config.num_keys) {
		if (g_bases[b].trigger_phase == INSERT) {
			LOG("base %2d - done puts [%d timeouts]", b,
					g_bases[b].num_put_timeouts);

			// Done with the write phase on this base, start the read phase.
			g_bases[b].trigger_phase = READ;
			g_bases[b].trigger_k = b;
		}
		else {
			LOG("base %2d - done gets [%d timeouts, %d not found]", b,
				g_bases[b].num_get_timeouts, g_bases[b].num_not_found);

			// Done with the read phase on this base - will exit event loop.
			return;
		}
	}

	// Re-add the trigger timer event. Its callback (this function) will start
	// the next transaction, independent of when the current one is completed.

	struct timeval trigger_timeval = { 0, g_config.trigger_usec };

	if (evtimer_add(g_bases[b].p_trigger_event, &trigger_timeval) != 0) {
		LOG("ERROR: adding timer on event base %d, to trigger key %d", b,
				g_bases[b].trigger_k);
		// Will exit event loop if timer add failed.
	}
}
示例#22
0
olibc_retval_t 
olibc_msg_q_destroy (olibc_msg_q_hdl *msg_q_hdl)
{
    olibc_retval_t retval;
    olibc_msg_q_hdl msg_q;
    struct event_base *evt_base = NULL;


    if (!msg_q_hdl) {
        return OLIBC_RETVAL_INVALID_INPUT;
    }

    msg_q = *msg_q_hdl;

    if (msg_q->deleting) {
        *msg_q_hdl = NULL;
        return OLIBC_RETVAL_SUCCESS;
    }

    msg_q->deleting = TRUE;

    if (msg_q->number_q_elements) {
        struct timeval timeout;

        if ((retval = olibc_pthread_get_event_base(msg_q->pthread_hdl, 
                                                   &evt_base)) != 
                OLIBC_RETVAL_SUCCESS) {
            return retval;
        }
        olibc_memset(&timeout, 0, sizeof(struct timeval));

        msg_q->timer_event_handle = event_new(evt_base, -1, EV_PERSIST,
                                              olibc_msg_q_destroy_timer_cbk, 
                                              msg_q);
        timeout.tv_sec = MSG_Q_DESTROY_TIME;
        evtimer_add(msg_q->timer_event_handle, &timeout);
        return OLIBC_RETVAL_SUCCESS;
    }

    olibc_msg_q_destroy_internal(msg_q);

    *msg_q_hdl = NULL;

    return OLIBC_RETVAL_SUCCESS;
}
示例#23
0
static void
sync_timer_callback (gint fd, short what, void *ud)
{
	struct rspamd_sync_ctx *ctx = ud;
	guint32 jittered_interval;

	/* Plan new event */
	evtimer_del (&ctx->tm_ev);
	/* Add some jittering for synchronization */
	jittered_interval = g_random_int_range (ctx->sync_interval,
			ctx->sync_interval * 2);
	msec_to_tv (jittered_interval, &ctx->interval);
	evtimer_add (&ctx->tm_ev, &ctx->interval);
	log_next_sync (ctx->st->symbol, ctx->interval.tv_sec);

	if (ctx->is_busy) {
		/* Sync is in progress */
		msg_info ("syncronization process is in progress, do not start new one");
		return;
	}

	if ((ctx->sock =
		make_universal_socket (ctx->st->binlog->master_addr,
		ctx->st->binlog->master_port,
		SOCK_STREAM, TRUE, FALSE, TRUE)) == -1) {
		msg_info ("cannot connect to %s", ctx->st->binlog->master_addr);
		return;
	}
	/* Now create and activate dispatcher */
	msec_to_tv (ctx->timeout, &ctx->io_tv);
	ctx->dispatcher = rspamd_create_dispatcher (ctx->ev_base,
			ctx->sock,
			BUFFER_LINE,
			sync_read,
			NULL,
			sync_err,
			&ctx->io_tv,
			ctx);

	ctx->state = SYNC_STATE_GREETING;
	ctx->is_busy = TRUE;

	msg_info ("starting synchronization of %s", ctx->st->symbol);

}
示例#24
0
文件: analyze.c 项目: 4sp1r3/Honeyd
void
analyze_init(void)
{
	struct timeval tv;
	timerclear(&tv);
	tv.tv_sec = ANALYZE_REPORT_INTERVAL; 

	struct event *ev_analyze = event_new(stats_libevent_base, -1, EV_PERSIST, analyze_report_cb, NULL);
	evtimer_add(ev_analyze, &tv);

	SPLAY_INIT(&oses);
	SPLAY_INIT(&ports);
	SPLAY_INIT(&spammers);
	SPLAY_INIT(&countries);
	SPLAY_INIT(&country_cache);

	evdns_init();
}
示例#25
0
static int
execute(struct worker_command *cmd)
{
  struct timeval tv = { cmd->arg.delay, 0 };

  if (cmd->arg.delay)
    {
      cmd->arg.timer = evtimer_new(evbase_worker, execute_cb, cmd);
      evtimer_add(cmd->arg.timer, &tv);

      return 1; // Not done yet, ask caller not to free cmd
    }

  cmd->arg.cb(cmd->arg.cb_arg);
  free(cmd->arg.cb_arg);

  return 0;
}
示例#26
0
文件: config.c 项目: gunhu/OpenSMTPD
static void
process_stat_event(int fd, short ev, void *arg)
{
    struct event	*e = arg;
    struct timeval	 tv;

    process_stat(p_control);
    process_stat(p_lka);
    process_stat(p_parent);
    process_stat(p_queue);
    process_stat(p_scheduler);
    process_stat(p_pony);
    process_stat(p_ca);

    tv.tv_sec = 1;
    tv.tv_usec = 0;
    evtimer_add(e, &tv);
}
示例#27
0
static guint event_timeout_add (guint interval, GSourceFunc function, gpointer data) {
	struct timeval timeout;
	PurpleIOClosure *closure = g_new0(PurpleIOClosure, 1);
	closure->function2 = function;
	closure->data = data;
	
	timeout.tv_sec = interval/1000;
	timeout.tv_usec = (interval%1000)*1000;
	evtimer_set(&closure->evfifo, event_io_invoke, closure);
	evtimer_add(&closure->evfifo, &timeout);
	closure->timeout = timeout;
	
	guint *f = (guint *) g_malloc(sizeof(guint));
	*f = id;
	id++;
	g_hash_table_replace(events, f, closure);
	return *f;
}
示例#28
0
static void
setup_notify_active(struct notify_zone_t* zone)
{
	zone->notify_retry = 0;
	zone->notify_current = zone->options->pattern->notify;
	zone->notify_timeout.tv_sec = 0;
	zone->notify_timeout.tv_usec = 0;

	if(zone->notify_send_enable)
		notify_send_disable(zone);
	event_set(&zone->notify_send_handler, -1, EV_TIMEOUT,
		xfrd_handle_notify_send, zone);
	if(event_base_set(xfrd->event_base, &zone->notify_send_handler) != 0)
		log_msg(LOG_ERR, "notifysend: event_base_set failed");
	if(evtimer_add(&zone->notify_send_handler, &zone->notify_timeout) != 0)
		log_msg(LOG_ERR, "notifysend: evtimer_add failed");
	zone->notify_send_enable = 1;
}
示例#29
0
文件: hub.c 项目: xiserge/Shakespeer
void hub_start_myinfo_updater(void)
{
    static struct event ev;
    evtimer_set(&ev, myinfo_updater, &ev);
    struct timeval tv = {.tv_sec = 4, .tv_usec = 0};
    evtimer_add(&ev, &tv);
}

static void hub_set_passive_GFunc(hub_t *hub, void *user_data)
{
    return_if_fail(hub);
    return_if_fail(hub->me);

    bool *on = user_data;
    return_if_fail(on);

    hub->me->passive = *on;
}
示例#30
0
int main(void)
{
	event_init();

	CClient *client = new CClient;
	if( client->open( CONNECT_ADDR, CONNECT_PORT ) < 0 ){
		return 0;
	}

    struct timeval t;
    timerclear( &t );
    struct event ev;
    evtimer_set( &ev, oneshot_send, client );
    evtimer_add( &ev, &t );

    event_dispatch();
    return 0;
}