char *data, size_t max_len,
bool *pipe_outstanding);
- /* call to close a namedpipe.
- * function is expected to perform all cleanups
- * necessary, free all memory etc.
- *
- * returns True if cleanup was successful (not that
- * we particularly care).
- */
- bool (*namedpipe_close)(void * np_state);
-
} smb_np_struct;
struct api_struct {
static ssize_t read_from_internal_pipe(void *np_conn, char *data, size_t n,
bool *is_data_outstanding);
static ssize_t write_to_internal_pipe(void *np_conn, char *data, size_t n);
-static bool close_internal_rpc_pipe_hnd(void *np_conn);
+static int close_internal_rpc_pipe_hnd(struct pipes_struct *pipe);
/****************************************************************************
Internal Pipe iterator functions.
p->namedpipe_create = make_internal_rpc_pipe_p;
p->namedpipe_read = read_from_internal_pipe;
p->namedpipe_write = write_to_internal_pipe;
- p->namedpipe_close = close_internal_rpc_pipe_hnd;
p->np_state = p->namedpipe_create(pipe_name, conn->client_address,
conn->server_info, vuid);
DEBUG(4,("Created internal pipe %s (pipes_open=%d)\n",
pipe_name, pipes_open));
+ talloc_set_destructor(p, close_internal_rpc_pipe_hnd);
+
return p;
}
return False;
}
- p->namedpipe_close(p->np_state);
+ TALLOC_FREE(p->np_state);
bitmap_clear(bmap, p->pnum - pipe_handle_offset);
Close an rpc pipe.
****************************************************************************/
-static bool close_internal_rpc_pipe_hnd(void *np_conn)
+static int close_internal_rpc_pipe_hnd(struct pipes_struct *p)
{
- pipes_struct *p = (pipes_struct *)np_conn;
if (!p) {
DEBUG(0,("Invalid pipe in close_internal_rpc_pipe_hnd\n"));
return False;