chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
bd982a8
)
fix socket state machine to listen properly on sockets
author
Lennart Poettering
<lennart@poettering.net>
Wed, 27 Jan 2010 04:33:11 +0000
(
05:33
+0100)
committer
Lennart Poettering
<lennart@poettering.net>
Wed, 27 Jan 2010 04:33:11 +0000
(
05:33
+0100)
socket.c
patch
|
blob
|
history
diff --git
a/socket.c
b/socket.c
index fb622a667fe34e46ba6b62103f60ffb386f20def..1954259b508308b8f8c6dd32eee0c03708e2412a 100644
(file)
--- a/
socket.c
+++ b/
socket.c
@@
-464,12
+464,27
@@
fail:
socket_enter_stop_post(s, false);
}
socket_enter_stop_post(s, false);
}
+static void socket_enter_listening(Socket *s) {
+ int r;
+ assert(s);
+
+ if ((r = socket_watch_fds(s)) < 0) {
+ log_warning("%s failed to watch sockets: %s", unit_id(UNIT(s)), strerror(-r));
+ goto fail;
+ }
+
+ socket_set_state(s, SOCKET_LISTENING);
+ return;
+
+fail:
+ socket_enter_stop_pre(s, false);
+}
+
static void socket_enter_start_post(Socket *s) {
int r;
assert(s);
static void socket_enter_start_post(Socket *s) {
int r;
assert(s);
- if ((r = socket_open_fds(s)) < 0 ||
- (r = socket_watch_fds(s)) < 0) {
+ if ((r = socket_open_fds(s)) < 0) {
log_warning("%s failed to listen on sockets: %s", unit_id(UNIT(s)), strerror(-r));
goto fail;
}
log_warning("%s failed to listen on sockets: %s", unit_id(UNIT(s)), strerror(-r));
goto fail;
}
@@
-483,7
+498,7
@@
static void socket_enter_start_post(Socket *s) {
socket_set_state(s, SOCKET_START_POST);
} else
socket_set_state(s, SOCKET_START_POST);
} else
- socket_
set_state(s, SOCKET_LISTENING
);
+ socket_
enter_listening(s
);
return;
return;
@@
-611,7
+626,7
@@
static void socket_fd_event(Unit *u, int fd, uint32_t events, Watch *w) {
assert(s);
assert(s);
- log_
info
("Incoming traffic on %s", unit_id(u));
+ log_
debug
("Incoming traffic on %s", unit_id(u));
if (events != POLLIN)
socket_enter_stop_pre(s, false);
if (events != POLLIN)
socket_enter_stop_pre(s, false);
@@
-658,7
+673,7
@@
static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) {
case SOCKET_START_POST:
if (success)
case SOCKET_START_POST:
if (success)
- socket_
set_state(s, SOCKET_LISTENING
);
+ socket_
enter_listening(s
);
else
socket_enter_stop_pre(s, false);
break;
else
socket_enter_stop_pre(s, false);
break;