diff options
Diffstat (limited to 'api/src/glfs.c')
-rw-r--r-- | api/src/glfs.c | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index d995b7f130c..b151936a6e8 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -541,6 +541,32 @@ pub_glfs_from_glfd (struct glfs_fd *glfd) GFAPI_SYMVER_PUBLIC_DEFAULT(glfs_from_glfd, 3.4.0); +void +glfs_fd_destroy (void *data) +{ + struct glfs_fd *glfd = NULL; + + if (!data) + return; + + glfd = (struct glfs_fd *)data; + + glfs_lock (glfd->fs); + { + list_del_init (&glfd->openfds); + } + glfs_unlock (glfd->fs); + + if (glfd->fd) { + fd_unref (glfd->fd); + glfd->fd = NULL; + } + + GF_FREE (glfd->readdirbuf); + + GF_FREE (glfd); +} + struct glfs_fd * glfs_fd_new (struct glfs *fs) @@ -555,6 +581,8 @@ glfs_fd_new (struct glfs *fs) INIT_LIST_HEAD (&glfd->openfds); + GF_REF_INIT (glfd, glfs_fd_destroy); + return glfd; } @@ -573,28 +601,6 @@ glfs_fd_bind (struct glfs_fd *glfd) glfs_unlock (fs); } -void -glfs_fd_destroy (struct glfs_fd *glfd) -{ - if (!glfd) - return; - - glfs_lock (glfd->fs); - { - list_del_init (&glfd->openfds); - } - glfs_unlock (glfd->fs); - - if (glfd->fd) { - fd_unref (glfd->fd); - glfd->fd = NULL; - } - - GF_FREE (glfd->readdirbuf); - - GF_FREE (glfd); -} - static void * glfs_poller (void *data) |