diff options
Diffstat (limited to 'api/src/glfs-handleops.c')
| -rw-r--r-- | api/src/glfs-handleops.c | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/api/src/glfs-handleops.c b/api/src/glfs-handleops.c index 4180f5cf777..65b2b6a467c 100644 --- a/api/src/glfs-handleops.c +++ b/api/src/glfs-handleops.c @@ -1987,6 +1987,14 @@ out:          return ret;  } +static void glfs_release_upcall (void *ptr) +{ +        struct glfs_upcall *to_free = ptr; + +        if (to_free->event) +                to_free->free_event (to_free->event); +} +  /*   * This API is used to poll for upcall events stored in the upcall list.   * Current users of this API is NFS-Ganesha. Incase of any event received, it @@ -2068,8 +2076,9 @@ pub_glfs_h_poll_upcall (struct glfs *fs, struct glfs_upcall **up_arg)          if (upcall_data) {                  switch (upcall_data->event_type) {                  case GF_UPCALL_CACHE_INVALIDATION: -                        *up_arg = GF_CALLOC (1, sizeof (struct gf_upcall), -                                             glfs_mt_upcall_entry_t); +                        *up_arg = GLFS_CALLOC (1, sizeof (struct gf_upcall), +                                               glfs_release_upcall, +                                               glfs_mt_upcall_entry_t);                          if (!*up_arg) {                                  errno = ENOMEM;                                  break; /* goto free u_list */ @@ -2088,7 +2097,7 @@ pub_glfs_h_poll_upcall (struct glfs *fs, struct glfs_upcall **up_arg)                                  if ((*up_arg)->reason == GLFS_UPCALL_EVENT_NULL)                                          errno = ENOENT; -                                GF_FREE (*up_arg); +                                GLFS_FREE (*up_arg);                                  *up_arg = NULL;                          }                          break;  | 
