Skip to content

Commit 3f08a14

Browse files
committed
Remove panic during nvml shutdown
1 parent 12d87e5 commit 3f08a14

File tree

7 files changed

+60
-34
lines changed

7 files changed

+60
-34
lines changed

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,21 @@ import (
6060
)
6161

6262
func main() {
63-
ret := nvml.Init()
63+
ret, err := nvml.Init()
64+
if err != nil {
65+
log.Fatalf("Unable to open NVML library: %v", err)
66+
}
6467
if ret != nvml.SUCCESS {
6568
log.Fatalf("Unable to initialize NVML: %v", nvml.ErrorString(ret))
6669
}
6770
defer func() {
68-
ret := nvml.Shutdown()
71+
ret, err := nvml.Shutdown()
6972
if ret != nvml.SUCCESS {
7073
log.Fatalf("Unable to shutdown NVML: %v", nvml.ErrorString(ret))
7174
}
75+
if err != nil {
76+
log.Fatalf("Unable to close NVML library: %v", err)
77+
}
7278
}()
7379

7480
count, ret := nvml.DeviceGetCount()

examples/compute-processes/main.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,21 @@ import (
2424
)
2525

2626
func main() {
27-
ret := nvml.Init()
27+
ret, err := nvml.Init()
28+
if err != nil {
29+
log.Fatalf("Unable to open NVML library: %v", err)
30+
}
2831
if ret != nvml.SUCCESS {
2932
log.Fatalf("Unable to initialize NVML: %v", nvml.ErrorString(ret))
3033
}
3134
defer func() {
32-
ret := nvml.Shutdown()
35+
ret, err := nvml.Shutdown()
3336
if ret != nvml.SUCCESS {
3437
log.Fatalf("Unable to shutdown NVML: %v", nvml.ErrorString(ret))
3538
}
39+
if err != nil {
40+
log.Fatalf("Unable to close NVML library: %v", err)
41+
}
3642
}()
3743

3844
count, ret := nvml.DeviceGetCount()

examples/devices/main.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,21 @@ import (
2424
)
2525

2626
func main() {
27-
ret := nvml.Init()
27+
ret, err := nvml.Init()
28+
if err != nil {
29+
log.Fatalf("Unable to open NVML library: %v", err)
30+
}
2831
if ret != nvml.SUCCESS {
2932
log.Fatalf("Unable to initialize NVML: %v", nvml.ErrorString(ret))
3033
}
3134
defer func() {
32-
ret := nvml.Shutdown()
35+
ret, err := nvml.Shutdown()
3336
if ret != nvml.SUCCESS {
3437
log.Fatalf("Unable to shutdown NVML: %v", nvml.ErrorString(ret))
3538
}
39+
if err != nil {
40+
log.Fatalf("Unable to close NVML library: %v", err)
41+
}
3642
}()
3743

3844
count, ret := nvml.DeviceGetCount()

gen/nvml/init.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
package nvml
1616

1717
import (
18-
"fmt"
19-
2018
"github.com/NVIDIA/go-nvml/pkg/dl"
2119
)
2220

@@ -30,45 +28,45 @@ const (
3028
var nvml *dl.DynamicLibrary
3129

3230
// nvml.Init()
33-
func Init() Return {
31+
func Init() (Return, error) {
3432
lib := dl.New(nvmlLibraryName, nvmlLibraryLoadFlags)
3533
err := lib.Open()
3634
if err != nil {
37-
return ERROR_LIBRARY_NOT_FOUND
35+
return ERROR_LIBRARY_NOT_FOUND, err
3836
}
3937

4038
nvml = lib
4139
updateVersionedSymbols()
4240

43-
return nvmlInit()
41+
return nvmlInit(), nil
4442
}
4543

4644
// nvml.InitWithFlags()
47-
func InitWithFlags(Flags uint32) Return {
45+
func InitWithFlags(Flags uint32) (Return, error) {
4846
lib := dl.New(nvmlLibraryName, nvmlLibraryLoadFlags)
4947
err := lib.Open()
5048
if err != nil {
51-
return ERROR_LIBRARY_NOT_FOUND
49+
return ERROR_LIBRARY_NOT_FOUND, err
5250
}
5351

5452
nvml = lib
5553

56-
return nvmlInitWithFlags(Flags)
54+
return nvmlInitWithFlags(Flags), nil
5755
}
5856

5957
// nvml.Shutdown()
60-
func Shutdown() Return {
58+
func Shutdown() (Return, error) {
6159
ret := nvmlShutdown()
6260
if ret != SUCCESS {
63-
return ret
61+
return ret, nil
6462
}
6563

6664
err := nvml.Close()
6765
if err != nil {
68-
panic(fmt.Sprintf("error closing %s: %v", nvmlLibraryName, err))
66+
return ret, err
6967
}
7068

71-
return ret
69+
return ret, nil
7270
}
7371

7472
// Default all versioned APIs to v1 (to infer the types)

gen/nvml/nvml_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,25 @@ import (
1919
)
2020

2121
func TestInit(t *testing.T) {
22-
ret := Init()
22+
ret, err := Init()
23+
if err != nil {
24+
t.Errorf("NVML open: %v", err)
25+
}
2326
if ret != SUCCESS {
2427
t.Errorf("Init: %v", ret)
2528
} else {
2629
t.Logf("Init: %v", ret)
2730
}
2831

29-
ret = Shutdown()
32+
ret, err = Shutdown()
3033
if ret != SUCCESS {
3134
t.Errorf("Shutdown: %v", ret)
3235
} else {
3336
t.Logf("Shutdown: %v", ret)
3437
}
38+
if err != nil {
39+
t.Errorf("NVML close: %v", err)
40+
}
3541
}
3642

3743
func TestSystem(t *testing.T) {

pkg/nvml/init.go

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
package nvml
1616

1717
import (
18-
"fmt"
19-
2018
"github.com/NVIDIA/go-nvml/pkg/dl"
2119
)
2220

@@ -30,45 +28,45 @@ const (
3028
var nvml *dl.DynamicLibrary
3129

3230
// nvml.Init()
33-
func Init() Return {
31+
func Init() (Return, error) {
3432
lib := dl.New(nvmlLibraryName, nvmlLibraryLoadFlags)
3533
err := lib.Open()
3634
if err != nil {
37-
return ERROR_LIBRARY_NOT_FOUND
35+
return ERROR_LIBRARY_NOT_FOUND, err
3836
}
3937

4038
nvml = lib
4139
updateVersionedSymbols()
4240

43-
return nvmlInit()
41+
return nvmlInit(), nil
4442
}
4543

4644
// nvml.InitWithFlags()
47-
func InitWithFlags(Flags uint32) Return {
45+
func InitWithFlags(Flags uint32) (Return, error) {
4846
lib := dl.New(nvmlLibraryName, nvmlLibraryLoadFlags)
4947
err := lib.Open()
5048
if err != nil {
51-
return ERROR_LIBRARY_NOT_FOUND
49+
return ERROR_LIBRARY_NOT_FOUND, err
5250
}
5351

5452
nvml = lib
5553

56-
return nvmlInitWithFlags(Flags)
54+
return nvmlInitWithFlags(Flags), nil
5755
}
5856

5957
// nvml.Shutdown()
60-
func Shutdown() Return {
58+
func Shutdown() (Return, error) {
6159
ret := nvmlShutdown()
6260
if ret != SUCCESS {
63-
return ret
61+
return ret, nil
6462
}
6563

6664
err := nvml.Close()
6765
if err != nil {
68-
panic(fmt.Sprintf("error closing %s: %v", nvmlLibraryName, err))
66+
return ret, err
6967
}
7068

71-
return ret
69+
return ret, nil
7270
}
7371

7472
// Default all versioned APIs to v1 (to infer the types)

pkg/nvml/nvml_test.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,25 @@ import (
1919
)
2020

2121
func TestInit(t *testing.T) {
22-
ret := Init()
22+
ret, err := Init()
23+
if err != nil {
24+
t.Errorf("NVML open: %v", err)
25+
}
2326
if ret != SUCCESS {
2427
t.Errorf("Init: %v", ret)
2528
} else {
2629
t.Logf("Init: %v", ret)
2730
}
2831

29-
ret = Shutdown()
32+
ret, err = Shutdown()
3033
if ret != SUCCESS {
3134
t.Errorf("Shutdown: %v", ret)
3235
} else {
3336
t.Logf("Shutdown: %v", ret)
3437
}
38+
if err != nil {
39+
t.Errorf("NVML close: %v", err)
40+
}
3541
}
3642

3743
func TestSystem(t *testing.T) {

0 commit comments

Comments
 (0)