VFS connection data cleanup with multiple modules

Jeremy Allison jra at samba.org
Tue Sep 30 20:54:26 GMT 2008

On Tue, Sep 30, 2008 at 04:39:44PM -0400, Constantine Vetoshev wrote:
> I'm trying to use a stack of VFS modules, and I see strange behavior
> with reclaiming connection-specific data at disconnect time.
> Specifically, it seems that the function which releases
> connection-specific data only runs for the first VFS module loaded.
> Simplified example follows. Here's a snippet of the smb.conf which
> loads the modules:
> [share]
>   path = /my/path
>   vfs objects = vfs_object_1 vfs_object_2
> I'm using release_data_X function pointers when I set the connection
> data in connect callbacks as follows:
> In vfs_object_1:
>       handle, data, release_data_1, conn_data_1, return -1);
> In vfs_object_2:
>       handle, data, release_data_2, conn_data_2, return -1);
> and so on, where release_data_1 is a pointer to a function which
> releases the memory and resources in the conn_data_1 struct, and
> release_data_2 releases memory and resources in the conn_data_2
> struct.
> When I disconnect from the share, I expect that release_data_1 and
> release_data_2 both run, but logging shows that only release_data_1
> runs. I can force release_data_2 to run by putting an explicit call to
> it from a disconnect callback for vfs_object_2, but that doesn't seem
> right.
> Am I missing something about how the release functions should work?
> I'm currently using Samba 3.0.28a.

It should get called from conn_free_internal() when the
connection struct is removed. See this code :

        /* Free vfs_connection_struct */
        handle = conn->vfs_handles;
        while(handle) {
                DLIST_REMOVE(conn->vfs_handles, handle);
                thandle = handle->next;
                if (handle->free_data)
                handle = thandle;

which should call all the handle release functions in
reverse order of registration.


More information about the samba-technical mailing list