#include "dircache.h"
#ifndef SOL_TCP
-#define SOL_TCP IPPROTO_TCPSOL_TCP
+#define SOL_TCP IPPROTO_TCP
#endif
/*
static void afp_dsi_close(AFPObj *obj)
{
DSI *dsi = obj->dsi;
-
+ sigset_t sigs;
+
close(obj->ipc_fd);
obj->ipc_fd = -1;
}
}
- close_all_vol();
- if (obj->logout)
+ close_all_vol(obj);
+ if (obj->logout) {
+ /* Block sigs, PAM/systemd/whoever might send us a SIG??? in (*obj->logout)() -> pam_close_session() */
+ sigfillset(&sigs);
+ pthread_sigmask(SIG_BLOCK, &sigs, NULL);
(*obj->logout)();
+ }
LOG(log_note, logtype_afpd, "AFP statistics: %.2f KB read, %.2f KB written",
dsi->read_count/1024.0, dsi->write_count/1024.0);
struct sigaction action;
AFPobj = obj;
- dsi->AFPobj = obj;
obj->exit = afp_dsi_die;
obj->reply = (int (*)()) dsi_cmdreply;
obj->attention = (int (*)(void *, AFPUserBytes)) dsi_attention;