diff --git a/mesh/mesh-config-json.c b/mesh/mesh-config-json.c
index d3f423e..05b2a56 100644
--- a/mesh/mesh-config-json.c
+++ b/mesh/mesh-config-json.c
timersub(&now, &cfg->write_time, &elapsed);
elapsed_ms = elapsed.tv_sec * 1000 + elapsed.tv_usec / 1000;
+ /*
+ * If time since last write is zero, this means that
+ * idle_save_config is already pending, so we don't need to do
+ * anything.
+ */
+ if (!elapsed_ms)
+ return true;
+
cached = seq + (seq - cfg->write_seq) *
1000 * MIN_SEQ_CACHE_TIME / elapsed_ms;