X-Git-Url: https://arthur.barton.de/gitweb/?p=netatalk.git;a=blobdiff_plain;f=etc%2Fafpd%2Fafp_dsi.c;h=98404ce20f588c849faba4c66cb02dc5b5db211a;hp=e68b63a47e9386162c881ba8b8071b16bedec9db;hb=HEAD;hpb=b0f17861a6dc6237ad3f105694d928b2cf34a8e8 diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c index e68b63a4..98404ce2 100644 --- a/etc/afpd/afp_dsi.c +++ b/etc/afpd/afp_dsi.c @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include #include @@ -39,6 +41,7 @@ #include #include #include +#include #include "switch.h" #include "auth.h" @@ -336,6 +339,11 @@ static void alarm_handler(int sig _U_) } } +static void child_handler(int sig _U_) +{ + wait(NULL); +} + /* ----------------- if dsi->in_write is set attention, tickle (and close?) msg aren't sent. We don't care about tickle @@ -427,6 +435,17 @@ void afp_over_dsi_sighandlers(AFPObj *obj) afp_dsi_die(EXITERR_SYS); } #endif /* DEBUGGING */ + + /* SIGCLD */ + action.sa_handler = child_handler; +#ifdef SA_NOCLDWAIT +/* this enhancement simplifies things for Solaris, it also improves performance */ + action.sa_flags |= SA_NOCLDWAIT; +#endif + if (sigaction(SIGCLD, &action, NULL) < 0 ) { + LOG(log_error, logtype_afpd, "afp_over_dsi: sigaction: %s", strerror(errno) ); + afp_dsi_die(EXITERR_SYS); + } } /* ------------------------------------------- @@ -474,6 +493,13 @@ void afp_over_dsi(AFPObj *obj) int flag = 1; setsockopt(dsi->socket, SOL_TCP, TCP_NODELAY, &flag, sizeof(flag)); +#ifdef HAVE_TRACKER + /* Initialize Spotlight */ + if (obj->options.flags & OPTION_SPOTLIGHT) { + spotlight_init(obj); + } +#endif + ipc_child_state(obj, DSI_RUNNING); /* get stuck here until the end */ @@ -528,7 +554,7 @@ void afp_over_dsi(AFPObj *obj) if (reload_request) { reload_request = 0; - load_volumes(AFPobj); + load_volumes(AFPobj, lv_none); } /* The first SIGINT enables debugging, the next restores the config */