summaryrefslogtreecommitdiffstats
path: root/xlators/features/leases/src/leases-internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/features/leases/src/leases-internal.c')
-rw-r--r--xlators/features/leases/src/leases-internal.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/xlators/features/leases/src/leases-internal.c b/xlators/features/leases/src/leases-internal.c
index a52bf577b75..24e8389cbc6 100644
--- a/xlators/features/leases/src/leases-internal.c
+++ b/xlators/features/leases/src/leases-internal.c
@@ -826,12 +826,15 @@ void
recall_lease_timer_handler (struct gf_tw_timer_list *timer,
void *data, unsigned long calltime)
{
- inode_t *inode = NULL;
- lease_inode_t *lease_inode = NULL;
- leases_private_t *priv = NULL;
+ inode_t *inode = NULL;
+ lease_inode_t *lease_inode = NULL;
+ leases_private_t *priv = NULL;
+ lease_timer_data_t *timer_data = NULL;
- priv = THIS->private;
- inode = (inode_t *)data;
+ timer_data = data;
+
+ priv = timer_data->this->private;
+ inode = timer_data->inode;
pthread_mutex_lock (&priv->mutex);
{
lease_inode = new_lease_inode (inode);
@@ -859,6 +862,7 @@ __recall_lease (xlator_t *this, lease_inode_ctx_t *lease_ctx)
int notify_ret = -1;
struct gf_tw_timer_list *timer = NULL;
leases_private_t *priv = NULL;
+ lease_timer_data_t *timer_data = NULL;
if (lease_ctx->recall_in_progress) {
gf_msg_debug (this->name, 0, "Lease recall is already in "
@@ -896,8 +900,18 @@ __recall_lease (xlator_t *this, lease_inode_ctx_t *lease_ctx)
if (!timer) {
goto out;
}
+ timer_data = GF_CALLOC (1, sizeof (*timer_data),
+ gf_leases_mt_timer_data_t);
+ if (!timer_data) {
+ GF_FREE (timer);
+ goto out;
+ }
+
+ timer_data->inode = inode_ref (lease_ctx->inode);
+ timer_data->this = this;
+ timer->data = timer_data;
+
INIT_LIST_HEAD (&timer->entry);
- timer->data = inode_ref (lease_ctx->inode);
timer->expires = get_recall_lease_timeout (this);
timer->function = recall_lease_timer_handler;
lease_ctx->timer = timer;