projects
/
apps
/
pfixtools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implement lightweight getaddrinfo_a wrappers.
[apps/pfixtools.git]
/
job.c
diff --git
a/job.c
b/job.c
index
5216e65
..
454b35b
100644
(file)
--- a/
job.c
+++ b/
job.c
@@
-54,28
+54,22
@@
# endif
#endif
# endif
#endif
-
#include "job.h"
#include "job.h"
+#include "gai.h"
static int epollfd = -1;
static bool sigint = false;
static int epollfd = -1;
static bool sigint = false;
-static void job_wipe(job_t *job)
-{
- if (job->fd >= 0) {
- close(job->fd);
- job->fd = -1;
- }
-}
-DO_DELETE(job_t, job);
-
-void job_release(job_t **job)
+void job_delete(job_t **job)
{
if (*job) {
if ((*job)->stop) {
(*job)->stop(*job);
}
{
if (*job) {
if ((*job)->stop) {
(*job)->stop(*job);
}
- job_delete(job);
+ if ((*job)->fd >= 0) {
+ close((*job)->fd);
+ }
+ p_delete(job);
}
}
}
}
@@
-83,44
+77,46
@@
static job_t *job_register_fd(job_t *job)
{
struct epoll_event event = { .data.ptr = job, .events = EPOLLRDHUP };
{
struct epoll_event event = { .data.ptr = job, .events = EPOLLRDHUP };
- if (job->
state & JOB_READ || job->state & JOB_LISTEN
) {
+ if (job->
mode & (JOB_READ | JOB_LISTEN)
) {
event.events |= EPOLLIN;
}
event.events |= EPOLLIN;
}
- if (job->
state & JOB_WRITE || job->state & JOB_CONN
) {
- event.events |= EPOLL
IN
;
+ if (job->
mode & (JOB_WRITE | JOB_CONN)
) {
+ event.events |= EPOLL
OUT
;
}
if (epoll_ctl(epollfd, EPOLL_CTL_ADD, job->fd, &event) < 0) {
syslog(LOG_ERR, "epoll_ctl error: %m");
job->error = true;
}
if (epoll_ctl(epollfd, EPOLL_CTL_ADD, job->fd, &event) < 0) {
syslog(LOG_ERR, "epoll_ctl error: %m");
job->error = true;
- job_
releas
e(&job);
+ job_
delet
e(&job);
}
return job;
}
}
return job;
}
-void job_update_
state(job_t *job, int stat
e)
+void job_update_
mode(job_t *job, int mod
e)
{
struct epoll_event event = { .data.ptr = job, .events = EPOLLRDHUP };
{
struct epoll_event event = { .data.ptr = job, .events = EPOLLRDHUP };
- if (job->
state == stat
e)
+ if (job->
mode == mod
e)
return;
return;
- job->state = state;
-
- if (job->state & JOB_READ || job->state & JOB_LISTEN) {
+ job->mode = mode;
+ if (job->mode & (JOB_READ | JOB_LISTEN)) {
event.events |= EPOLLIN;
}
event.events |= EPOLLIN;
}
- if (job->
state & JOB_WRITE || job->state & JOB_CONN
) {
- event.events |= EPOLL
IN
;
+ if (job->
mode & (JOB_WRITE | JOB_CONN)
) {
+ event.events |= EPOLL
OUT
;
}
}
- epoll_ctl(epollfd, EPOLL_CTL_MOD, job->fd, &event);
+ if (epoll_ctl(epollfd, EPOLL_CTL_MOD, job->fd, &event) < 0) {
+ syslog(LOG_ERR, "epoll_ctl error: %m");
+ job->error = true;
+ }
}
}
-job_t *job_accept(job_t *listener, int
stat
e)
+job_t *job_accept(job_t *listener, int
mod
e)
{
int sock;
job_t *res;
{
int sock;
job_t *res;
@@
-137,13
+133,13
@@
job_t *job_accept(job_t *listener, int state)
res = job_new();
res->fd = sock;
res = job_new();
res->fd = sock;
- res->
state = stat
e;
+ res->
mode = mod
e;
res->process = listener->process;
res->stop = listener->stop;
return job_register_fd(res);
}
res->process = listener->process;
res->stop = listener->stop;
return job_register_fd(res);
}
-static void job_handler(int sig)
+static void job_
sig
handler(int sig)
{
static time_t lastintr = 0;
time_t now = time(NULL);
{
static time_t lastintr = 0;
time_t now = time(NULL);
@@
-173,8
+169,8
@@
static void job_handler(int sig)
void job_initialize(void)
{
signal(SIGPIPE, SIG_IGN);
void job_initialize(void)
{
signal(SIGPIPE, SIG_IGN);
- signal(SIGINT,
&job_
handler);
- signal(SIGTERM, &job_handler);
+ signal(SIGINT,
&job_sig
handler);
+ signal(SIGTERM, &job_
sig
handler);
epollfd = epoll_create(128);
if (epollfd < 0) {
epollfd = epoll_create(128);
if (epollfd < 0) {
@@
-203,9
+199,11
@@
void job_loop(void)
job->process(job);
if (job->error || job->done) {
job->process(job);
if (job->error || job->done) {
- job_
releas
e(&job);
+ job_
delet
e(&job);
}
}
}
}
+
+ gai_process();
}
}
}
}