diff --git a/src/box/lua/snapshot_daemon.lua b/src/box/lua/snapshot_daemon.lua
index b0cd1725b58bbaa18d9cd7b69d8ac2e085f2a594..f41226e655e664291654f4fce89de581d019edbf 100644
--- a/src/box/lua/snapshot_daemon.lua
+++ b/src/box/lua/snapshot_daemon.lua
@@ -172,29 +172,29 @@ do
             if interval == nil then
                 break
             end
-            if self.control:get(interval) == nil then
+            fiber.sleep(interval)
+            if self.reloaded ~= true then
                 local s, e = pcall(process, self)
 
                 if not s then
                     log.error(e)
                 end
             else
+                self.reloaded = false
                 log.info("reloaded")
             end
         end
         log.info("stopped")
-        self.control:close()
-        self.control = nil
         self.fiber = nil
     end
 
     local function reload(self)
         if self.snapshot_period > 0 and self.fiber == nil then
-            self.control = fiber.channel(5)
             self.fiber = fiber.create(daemon_fiber, self)
         elseif self.fiber ~= nil then
             -- wake up daemon
-            self.control:put(true)
+            self.reloaded = true
+            fiber.wakeup(self.fiber)
         end
     end