Prevent race condition on zfs-linux internal implementation of access to mnttab
This commit is contained in:
parent
0d2d2cf113
commit
6d3c5e3bd4
8
zfs.go
8
zfs.go
|
@ -182,8 +182,10 @@ func DatasetCreate(path string, dtype DatasetType,
|
|||
// and cleanup dataset object/s from memory)
|
||||
func (d *Dataset) Close() {
|
||||
// path, _ := d.Path()
|
||||
Global.Mtx.Lock()
|
||||
C.dataset_list_close(d.list)
|
||||
d.list = nil
|
||||
Global.Mtx.Unlock()
|
||||
for _, cd := range d.Children {
|
||||
cd.Close()
|
||||
}
|
||||
|
@ -320,6 +322,8 @@ func (d *Dataset) GetProperty(p Prop) (prop Property, err error) {
|
|||
err = errors.New(msgDatasetIsNil)
|
||||
return
|
||||
}
|
||||
Global.Mtx.Lock()
|
||||
defer Global.Mtx.Unlock()
|
||||
plist := C.read_dataset_property(d.list, C.int(p))
|
||||
if plist == nil {
|
||||
err = LastError()
|
||||
|
@ -492,6 +496,8 @@ func (d *Dataset) IsMounted() (mounted bool, where string) {
|
|||
if d.list == nil {
|
||||
return
|
||||
}
|
||||
Global.Mtx.Lock()
|
||||
defer Global.Mtx.Unlock()
|
||||
mp := C.dataset_is_mounted(d.list)
|
||||
// defer C.free(mp)
|
||||
if mounted = (mp != nil); mounted {
|
||||
|
@ -503,6 +509,8 @@ func (d *Dataset) IsMounted() (mounted bool, where string) {
|
|||
|
||||
// Mount the given filesystem.
|
||||
func (d *Dataset) Mount(options string, flags int) (err error) {
|
||||
Global.Mtx.Lock()
|
||||
defer Global.Mtx.Unlock()
|
||||
if d.list == nil {
|
||||
err = errors.New(msgDatasetIsNil)
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue