aboutsummaryrefslogtreecommitdiff
path: root/objectstore/packed/close.go
blob: f810f42c6edd7b38a7bff4b8b8fdde02e8325aa5 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package packed

// Close releases mapped pack/index resources associated with the store.
//
// Store borrows its root, so Close does not close it.
//
// Repeated calls to Close are undefined behavior.
func (store *Store) Close() error {
	store.stateMu.Lock()
	packs := store.packs
	store.stateMu.Unlock()
	store.idxMu.RLock()
	indexes := store.idxByPack
	store.idxMu.RUnlock()

	var closeErr error

	for _, pack := range packs {
		err := pack.close()
		if err != nil && closeErr == nil {
			closeErr = err
		}
	}

	for _, index := range indexes {
		err := index.close()
		if err != nil && closeErr == nil {
			closeErr = err
		}
	}

	store.cacheMu.Lock()
	store.deltaCache.clear()
	store.cacheMu.Unlock()

	return closeErr
}