return ENOMEM;
}
- sock->sockpath = sockpath;
+ sock->sockpath = talloc_strdup(sock, sockpath);
+ if (sock->sockpath == NULL) {
+ talloc_free(sock);
+ return ENOMEM;
+ }
sock->funcs = funcs;
sock->private_data = private_data;
sock->fd = -1;
return 0;
}
-static bool sock_socket_start_recv(struct tevent_req *req, int *perr)
+static bool sock_socket_start_recv(struct tevent_req *req, int *perr,
+ TALLOC_CTX *mem_ctx, const char **sockpath)
{
struct sock_socket_start_state *state = tevent_req_data(
req, struct sock_socket_start_state);
return false;
}
+ if (sockpath != NULL) {
+ *sockpath = talloc_steal(mem_ctx, state->sock->sockpath);
+ }
+
return true;
}
{
struct tevent_req *req = tevent_req_callback_data(
subreq, struct tevent_req);
+ struct sock_daemon_run_state *state = tevent_req_data(
+ req, struct sock_daemon_run_state);
+ const char *sockpath = NULL;
int ret = 0;
bool status;
- status = sock_socket_start_recv(subreq, &ret);
+ status = sock_socket_start_recv(subreq, &ret, state, &sockpath);
TALLOC_FREE(subreq);
sock_daemon_run_shutdown(req);
if (! status) {
+ D_ERR("socket %s closed unexpectedly\n", sockpath);
tevent_req_error(req, ret);
} else {
tevent_req_done(req);