diff --git a/ledis/dump.go b/ledis/dump.go
index <HASH>..<HASH> 100644
--- a/ledis/dump.go
+++ b/ledis/dump.go
@@ -46,21 +46,22 @@ func (l *Ledis) Dump(w io.Writer) error {
 	var commitID uint64
 	var snap *store.Snapshot
 
-	{
-		l.wLock.Lock()
-		defer l.wLock.Unlock()
-
-		if l.r != nil {
-			if commitID, err = l.r.LastCommitID(); err != nil {
-				return err
-			}
-		}
+	l.wLock.Lock()
 
-		if snap, err = l.ldb.NewSnapshot(); err != nil {
+	if l.r != nil {
+		if commitID, err = l.r.LastCommitID(); err != nil {
+			l.wLock.Unlock()
 			return err
 		}
 	}
 
+	if snap, err = l.ldb.NewSnapshot(); err != nil {
+		l.wLock.Unlock()
+		return err
+	}
+
+	l.wLock.Unlock()
+
 	wb := bufio.NewWriterSize(w, 4096)
 
 	h := &DumpHead{commitID}
closure defer not works as I think