diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-26 11:30:20 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:18 -0500 |
commit | e3880fa759cfa03222262327854fe7bbe585fe01 (patch) | |
tree | 7000172fad1b5cdcc0d071698ee3e203e61a8f4f /source4/libcli/raw/clitransport.c | |
parent | ad053090b817105a0974f4b8bf0b90e002297903 (diff) | |
download | samba-e3880fa759cfa03222262327854fe7bbe585fe01.tar.gz samba-e3880fa759cfa03222262327854fe7bbe585fe01.tar.bz2 samba-e3880fa759cfa03222262327854fe7bbe585fe01.zip |
r2660: - converted the libcli/raw/ library to use talloc_increase_ref_count()
rather than manual reference counts
- properly support SMBexit in the cifs and posix backends
- added a logoff method to all backends
With these changes the RAW-CONTEXT test now passes against the posix backend
(This used to be commit c315d6ac1cc40546fde1474702a6d66d07ee13c8)
Diffstat (limited to 'source4/libcli/raw/clitransport.c')
-rw-r--r-- | source4/libcli/raw/clitransport.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/source4/libcli/raw/clitransport.c b/source4/libcli/raw/clitransport.c index d70ceceab3..eb1d3631ee 100644 --- a/source4/libcli/raw/clitransport.c +++ b/source4/libcli/raw/clitransport.c @@ -42,6 +42,21 @@ static void smbcli_transport_event_handler(struct event_context *ev, struct fd_e } /* + destroy a transport + */ +static int transport_destructor(void *ptr) +{ + struct smbcli_transport *transport = ptr; + + smbcli_transport_dead(transport); + event_remove_fd(transport->event.ctx, transport->event.fde); + event_remove_timed(transport->event.ctx, transport->event.te); + event_context_destroy(transport->event.ctx); + talloc_free(transport->socket); + return 0; +} + +/* create a transport structure based on an established socket */ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock) @@ -67,8 +82,6 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock) smbcli_init_signing(transport); - transport->socket->reference_count++; - ZERO_STRUCT(transport->called); fde.fd = sock->fd; @@ -79,22 +92,9 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock) transport->event.fde = event_add_fd(transport->event.ctx, &fde); - return transport; -} + talloc_set_destructor(transport, transport_destructor); -/* - decrease reference count on a transport, and destroy if it becomes - zero -*/ -void smbcli_transport_close(struct smbcli_transport *transport) -{ - transport->reference_count--; - if (transport->reference_count <= 0) { - event_remove_fd(transport->event.ctx, transport->event.fde); - event_remove_timed(transport->event.ctx, transport->event.te); - event_context_destroy(transport->event.ctx); - smbcli_sock_close(transport->socket); - } + return transport; } /* |