Fix LevelDB closing order.

The storage itself should be closed before any of the objects passed into it
are closed (otherwise closing the storage can randomly freeze). Defers are
executed in reverse order, so closing the storage should be the last of the
defer statements.

Change-Id: Id920318b876f5b94767ed48c81221b3456770620
This commit is contained in:
Julius Volz 2014-01-28 15:16:06 +01:00
parent 18d9d00100
commit 718ad2224b

View file

@ -260,12 +260,6 @@ func NewLevelDBPersistence(o LevelDBOptions) (*LevelDBPersistence, error) {
func (l *LevelDBPersistence) Close() error {
// These are deferred to take advantage of forced closing in case of stack
// unwinding due to anomalies.
defer func() {
if l.storage != nil {
l.storage.Close()
}
}()
defer func() {
if l.filterPolicy != nil {
l.filterPolicy.Close()
@ -296,6 +290,12 @@ func (l *LevelDBPersistence) Close() error {
}
}()
defer func() {
if l.storage != nil {
l.storage.Close()
}
}()
return nil
}