int ifindex;
};
-static struct event *node_to_event(struct udev_list_node *node)
+static inline struct event *node_to_event(struct udev_list_node *node)
{
- char *event;
-
- event = (char *)node;
- event -= offsetof(struct event, node);
- return (struct event *)event;
+ return container_of(node, struct event, node);
}
static void event_queue_cleanup(struct udev *udev, enum event_state type);
int exitcode;
};
-static struct worker *node_to_worker(struct udev_list_node *node)
+static inline struct worker *node_to_worker(struct udev_list_node *node)
{
- char *worker;
-
- worker = (char *)node;
- worker -= offsetof(struct worker, node);
- return (struct worker *)worker;
+ return container_of(node, struct worker, node);
}
static void event_queue_delete(struct event *event, bool export)
/* request TERM signal if parent exits */
prctl(PR_SET_PDEATHSIG, SIGTERM);
+ /* reset OOM score, we only protect the main daemon */
+ write_one_line_file("/proc/self/oom_score_adj", "0");
+
for (;;) {
struct udev_event *udev_event;
struct worker_message msg;
continue;
util_strscpyl(filename, sizeof(filename), "/dev/", devname, NULL);
- mkdir_parents(filename, 0755);
+ mkdir_parents_label(filename, 0755);
label_context_set(filename, mode);
log_debug("mknod '%s' %c%u:%u\n", filename, type, maj, min);
if (mknod(filename, mode, makedev(maj, min)) < 0 && errno == EEXIST)
if (daemonize) {
pid_t pid;
- int fd;
pid = fork();
switch (pid) {
setsid();
- fd = open("/proc/self/oom_score_adj", O_RDWR|O_CLOEXEC);
- if (fd >= 0) {
- write(fd, "-1000", 5);
- close(fd);
- }
+ write_one_line_file("/proc/self/oom_score_adj", "-1000");
} else {
sd_notify(1, "READY=1");
}
/* set value depending on the amount of RAM */
if (memsize > 0)
- children_max = 128 + (memsize / 8);
+ children_max = 16 + (memsize / 8);
else
- children_max = 128;
+ children_max = 16;
}
log_debug("set children_max to %u\n", children_max);