summaryrefslogtreecommitdiff
path: root/src/socket.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-01-06 23:08:54 +0100
committerLennart Poettering <lennart@poettering.net>2012-01-06 23:08:54 +0100
commit57020a3abff20f176e9f0cbb982d7977119d6f08 (patch)
tree3b3d69307cecce0dc4ad25aa074c2a0db64bdfb6 /src/socket.h
parent73aa0c00df8b101bad4c3a038148a633df88610c (diff)
unit: properly update references to units which are merged
When we merge units that some kind of object points to, those pointers might become invalidated, and needs to be updated. Introduce a UnitRef struct which links up all the unit references, to ensure corrected references. At the same time, drop configured_sockets in the Service object, and replace it by proper UNIT_TRIGGERS resp. UNIT_TRIGGERED_BY dependencies, which allow us to simplify a lot of code.
Diffstat (limited to 'src/socket.h')
-rw-r--r--src/socket.h9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/socket.h b/src/socket.h
index fbd29dad7..4fc2cbe69 100644
--- a/src/socket.h
+++ b/src/socket.h
@@ -28,6 +28,7 @@ typedef struct Socket Socket;
#include "unit.h"
#include "socket-util.h"
#include "mount.h"
+#include "service.h"
typedef enum SocketState {
SOCKET_DEAD,
@@ -93,7 +94,7 @@ struct Socket {
/* For Accept=no sockets refers to the one service we'll
activate. For Accept=yes sockets is either NULL, or filled
when the next service we spawn. */
- Service *service;
+ UnitRef service;
SocketState state, deserialized_state;
@@ -103,9 +104,6 @@ struct Socket {
SocketExecCommand control_command_id;
pid_t control_pid;
- /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
- SocketAddressBindIPv6Only bind_ipv6_only;
-
mode_t directory_mode;
mode_t socket_mode;
@@ -130,6 +128,9 @@ struct Socket {
char *tcp_congestion;
long mq_maxmsg;
long mq_msgsize;
+
+ /* Only for INET6 sockets: issue IPV6_V6ONLY sockopt */
+ SocketAddressBindIPv6Only bind_ipv6_only;
};
/* Called from the service code when collecting fds */