diff options
author | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-11-07 11:17:09 +0300 |
---|---|---|
committer | Pavlo Yatsukhnenko <yatsukhnenko@gmail.com> | 2018-11-07 11:17:30 +0300 |
commit | 071a1d547682b927b8f658d7c1a727e6dd9286b5 (patch) | |
tree | 1980534ff20c07994d2b1ba952137f2f15517963 /redis_session.c | |
parent | 92f14b1480b73333db595821f8335ea5ee300113 (diff) |
Fix memory leak when aquiring lock
Diffstat (limited to 'redis_session.c')
-rw-r--r-- | redis_session.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/redis_session.c b/redis_session.c index 79225071..71b66b5b 100644 --- a/redis_session.c +++ b/redis_session.c @@ -275,6 +275,7 @@ static int lock_acquire(RedisSock *redis_sock, redis_session_lock_status *lock_s } /* Generate our qualified lock key */ + if (lock_status->lock_key) zend_string_release(lock_status->lock_key); lock_status->lock_key = zend_string_alloc(ZSTR_LEN(lock_status->session_key) + sizeof(suffix) - 1, 0); memcpy(ZSTR_VAL(lock_status->lock_key), ZSTR_VAL(lock_status->session_key), ZSTR_LEN(lock_status->session_key)); memcpy(ZSTR_VAL(lock_status->lock_key) + ZSTR_LEN(lock_status->session_key), suffix, sizeof(suffix) - 1); @@ -283,6 +284,7 @@ static int lock_acquire(RedisSock *redis_sock, redis_session_lock_status *lock_s gethostname(hostname, HOST_NAME_MAX); size_t hostname_len = strlen(hostname); size_t pid_len = snprintf(pid, sizeof(pid), "|%ld", (long)getpid()); + if (lock_status->lock_secret) zend_string_release(lock_status->lock_secret); lock_status->lock_secret = zend_string_alloc(hostname_len + pid_len, 0); memcpy(ZSTR_VAL(lock_status->lock_secret), hostname, hostname_len); memcpy(ZSTR_VAL(lock_status->lock_secret) + hostname_len, pid, pid_len); |