summaryrefslogtreecommitdiff
path: root/crawler.c
diff options
context:
space:
mode:
authordormando <dormando@rydia.net>2016-12-16 01:02:41 -0800
committerdormando <dormando@rydia.net>2016-12-16 01:02:41 -0800
commit34e4604dbe445e03449aece98a32af70b42d8d71 (patch)
treea2d5d66d61e60d9113c67c6b90d5f92b8dab52c4 /crawler.c
parent356ed3f99a1ce0bb0a656c44e34a9990729500cd (diff)
downloadmemcached-34e4604dbe445e03449aece98a32af70b42d8d71.tar.gz
don't double free in lru_crawler on closed clients
during finalization, a poll and deliberate close are run. if a client is closed during the poll it might double free.
Diffstat (limited to 'crawler.c')
-rw-r--r--crawler.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/crawler.c b/crawler.c
index d0e635c..fc7567c 100644
--- a/crawler.c
+++ b/crawler.c
@@ -402,7 +402,10 @@ static void *item_crawler_thread(void *arg) {
active_crawler_mod.mod->finalize(&active_crawler_mod);
if (active_crawler_mod.c.c != NULL) {
lru_crawler_poll(&active_crawler_mod.c);
- lru_crawler_release_client(&active_crawler_mod.c);
+ // Double checking in case the client closed during the poll
+ if (active_crawler_mod.c.c != NULL) {
+ lru_crawler_release_client(&active_crawler_mod.c);
+ }
}
active_crawler_mod.mod = NULL;
}