mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-09-04 17:00:35 +00:00
Add and del ccnet compilation dependency in seafile (#347)
* Add and del ccnet compilation dependency in seafile * Del import ccnet * Del extra ccnet compilation dependencies * Del support WIN32
This commit is contained in:
76
lib/timer.c
Normal file
76
lib/timer.c
Normal file
@@ -0,0 +1,76 @@
|
||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
|
||||
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
#include <event2/event.h>
|
||||
#include <event2/event_compat.h>
|
||||
#include <event2/event_struct.h>
|
||||
#else
|
||||
#include <event.h>
|
||||
#endif
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#include "timer.h"
|
||||
|
||||
struct CcnetTimer
|
||||
{
|
||||
struct event event;
|
||||
struct timeval tv;
|
||||
TimerCB func;
|
||||
void *user_data;
|
||||
uint8_t inCallback;
|
||||
};
|
||||
|
||||
static void
|
||||
timer_callback (evutil_socket_t fd, short event, void *vtimer)
|
||||
{
|
||||
int more;
|
||||
struct CcnetTimer *timer = vtimer;
|
||||
|
||||
timer->inCallback = 1;
|
||||
more = (*timer->func) (timer->user_data);
|
||||
timer->inCallback = 0;
|
||||
|
||||
if (more)
|
||||
evtimer_add (&timer->event, &timer->tv);
|
||||
else
|
||||
ccnet_timer_free (&timer);
|
||||
}
|
||||
|
||||
void
|
||||
ccnet_timer_free (CcnetTimer **ptimer)
|
||||
{
|
||||
CcnetTimer *timer;
|
||||
|
||||
/* zero out the argument passed in */
|
||||
g_return_if_fail (ptimer);
|
||||
|
||||
timer = *ptimer;
|
||||
*ptimer = NULL;
|
||||
|
||||
/* destroy the timer directly or via the command queue */
|
||||
if (timer && !timer->inCallback)
|
||||
{
|
||||
event_del (&timer->event);
|
||||
g_free (timer);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
Reference in New Issue
Block a user