Skip to content

Commit 09eb984

Browse files
committed
More modernizing logging
Ported block_device/nbd Made the native CGO return distinct errors in set_edid Made the cgo_linux (go code) report C-level error return codes Use defer for server and listener cleanup. Try doing a timeboxed GracefulStop of the server
1 parent 240e948 commit 09eb984

File tree

14 files changed

+249
-223
lines changed

14 files changed

+249
-223
lines changed

block_device.go

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99

1010
"github.com/jetkvm/kvm/internal/logging"
1111
"github.com/pojntfx/go-nbd/pkg/server"
12-
"github.com/rs/zerolog"
1312
)
1413

1514
type remoteImageBackend struct {
@@ -63,14 +62,19 @@ type NBDDevice struct {
6362
serverConn net.Conn
6463
clientConn net.Conn
6564
dev *os.File
66-
67-
l *zerolog.Logger
6865
}
6966

7067
func NewNBDDevice() *NBDDevice {
7168
return &NBDDevice{}
7269
}
7370

71+
func (d *NBDDevice) getLogger() *logging.Context {
72+
return logging.NewContext(logging.GetSubsystemLogger("nbd")).
73+
With().
74+
Str("socket_path", nbdSocketPath).
75+
Str("device_path", nbdDevicePath)
76+
}
77+
7478
func (d *NBDDevice) Start() error {
7579
var err error
7680

@@ -83,19 +87,10 @@ func (d *NBDDevice) Start() error {
8387
return err
8488
}
8589

86-
if d.l == nil {
87-
scopedLogger := logging.GetSubsystemLogger("nbd").
88-
With().
89-
Str("socket_path", nbdSocketPath).
90-
Str("device_path", nbdDevicePath).
91-
Logger()
92-
d.l = &scopedLogger
93-
}
94-
9590
// Remove the socket file if it already exists
9691
if _, err := os.Stat(nbdSocketPath); err == nil {
9792
if err := os.Remove(nbdSocketPath); err != nil {
98-
d.l.Error().Err(err).Msg("failed to remove existing socket file")
93+
d.getLogger().Error().Err(err).Msg("failed to remove existing socket file")
9994
os.Exit(1)
10095
}
10196
}
@@ -137,5 +132,5 @@ func (d *NBDDevice) runServerConn() {
137132
SupportsMultiConn: false,
138133
})
139134

140-
d.l.Info().Err(err).Msg("nbd server exited")
135+
d.getLogger().Info().Err(err).Msg("nbd server exited")
141136
}

block_device_linux.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ func (d *NBDDevice) runClientConn() {
1111
ExportName: "jetkvm",
1212
BlockSize: uint32(4 * 1024),
1313
})
14-
d.l.Info().Err(err).Msg("nbd client exited")
14+
d.getLogger().Info().Err(err).Msg("nbd client exited")
1515
}
1616

1717
func (d *NBDDevice) Close() {
1818
if d.dev != nil {
1919
err := client.Disconnect(d.dev)
2020
if err != nil {
21-
d.l.Warn().Err(err).Msg("error disconnecting nbd client")
21+
d.getLogger().Warn().Err(err).Msg("error disconnecting nbd client")
2222
}
2323
_ = d.dev.Close()
2424
}

display.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ func requestDisplayUpdate(shouldWakeDisplay bool, reason string) {
193193
if shouldWakeDisplay {
194194
wakeDisplay(false, reason)
195195
}
196-
logging.GetSubsystemLogger("display").Debug().Msg("display updating")
197196
// TODO: only run once regardless how many pending updates
198197
updateDisplay()
199198
}()

internal/native/cgo/edid.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,32 +81,28 @@ int set_edid(uint8_t *edid, size_t size)
8181
if (size != 128 && size != 256)
8282
{
8383
errno = EINVAL;
84-
return -1;
84+
return -2;
8585
}
8686

87-
int fd;
88-
struct v4l2_edid v4l2_edid;
89-
90-
fd = open(V4L_SUBDEV, O_RDWR);
87+
int fd = open(V4L_SUBDEV, O_RDWR);
9188
if (fd < 0)
9289
{
9390
log_error("Failed to open device");
94-
return -1;
91+
return -3;
9592
}
9693

9794
fix_edid_checksum(edid, size);
9895

96+
struct v4l2_edid v4l2_edid;
9997
memset(&v4l2_edid, 0, sizeof(v4l2_edid));
100-
v4l2_edid.pad = 0;
101-
v4l2_edid.start_block = 0;
10298
v4l2_edid.blocks = size / 128;
10399
v4l2_edid.edid = edid;
104100

105101
if (ioctl(fd, VIDIOC_S_EDID, &v4l2_edid) < 0)
106102
{
107103
log_error("Failed to set EDID");
108104
close(fd);
109-
return -1;
105+
return -4;
110106
}
111107

112108
close(fd);

internal/native/cgo_linux.go

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ func jetkvm_go_log_handler(level C.int, filename *C.cchar_t, funcname *C.cchar_t
7575
FuncName: C.GoString(funcname),
7676
Line: int(line),
7777
}
78-
7978
logChan <- logMessage
8079
}
8180

@@ -143,7 +142,7 @@ func videoInit(factor float64) error {
143142

144143
ret := C.jetkvm_video_init(factorC)
145144
if ret != 0 {
146-
return fmt.Errorf("failed to initialize video: %d", ret)
145+
return fmt.Errorf("failed to initialize video with factor %f: %d", factor, ret)
147146
}
148147
return nil
149148
}
@@ -194,7 +193,6 @@ func uiSetVar(name string, value string) {
194193

195194
nameCStr := C.CString(name)
196195
defer C.free(unsafe.Pointer(nameCStr))
197-
198196
valueCStr := C.CString(value)
199197
defer C.free(unsafe.Pointer(valueCStr))
200198

@@ -217,6 +215,7 @@ func uiSwitchToScreen(screen string) {
217215

218216
screenCStr := C.CString(screen)
219217
defer C.free(unsafe.Pointer(screenCStr))
218+
220219
C.jetkvm_ui_load_screen(screenCStr)
221220
}
222221

@@ -236,6 +235,7 @@ func uiObjAddState(objName string, state string) (bool, error) {
236235
defer C.free(unsafe.Pointer(objNameCStr))
237236
stateCStr := C.CString(state)
238237
defer C.free(unsafe.Pointer(stateCStr))
238+
239239
C.jetkvm_ui_add_state(objNameCStr, stateCStr)
240240
return true, nil
241241
}
@@ -248,6 +248,7 @@ func uiObjClearState(objName string, state string) (bool, error) {
248248
defer C.free(unsafe.Pointer(objNameCStr))
249249
stateCStr := C.CString(state)
250250
defer C.free(unsafe.Pointer(stateCStr))
251+
251252
C.jetkvm_ui_clear_state(objNameCStr, stateCStr)
252253
return true, nil
253254
}
@@ -268,8 +269,12 @@ func uiObjAddFlag(objName string, flag string) (bool, error) {
268269
defer C.free(unsafe.Pointer(objNameCStr))
269270
flagCStr := C.CString(flag)
270271
defer C.free(unsafe.Pointer(flagCStr))
271-
C.jetkvm_ui_add_flag(objNameCStr, flagCStr)
272-
return true, nil
272+
273+
ret := C.jetkvm_ui_add_flag(objNameCStr, flagCStr)
274+
if ret < 0 {
275+
return false, fmt.Errorf("failed to add flag %s on %s: %d", flag, objName, ret)
276+
}
277+
return ret == 0, nil
273278
}
274279

275280
func uiObjClearFlag(objName string, flag string) (bool, error) {
@@ -280,8 +285,12 @@ func uiObjClearFlag(objName string, flag string) (bool, error) {
280285
defer C.free(unsafe.Pointer(objNameCStr))
281286
flagCStr := C.CString(flag)
282287
defer C.free(unsafe.Pointer(flagCStr))
283-
C.jetkvm_ui_clear_flag(objNameCStr, flagCStr)
284-
return true, nil
288+
289+
ret := C.jetkvm_ui_clear_flag(objNameCStr, flagCStr)
290+
if ret < 0 {
291+
return false, fmt.Errorf("failed to clear flag %s on %s: %d", flag, objName, ret)
292+
}
293+
return ret == 0, nil
285294
}
286295

287296
func uiObjHide(objName string) (bool, error) {
@@ -311,7 +320,6 @@ func uiObjFadeIn(objName string, duration uint32) (bool, error) {
311320
defer C.free(unsafe.Pointer(objNameCStr))
312321

313322
C.jetkvm_ui_fade_in(objNameCStr, C.u_int32_t(duration))
314-
315323
return true, nil
316324
}
317325

@@ -323,7 +331,6 @@ func uiObjFadeOut(objName string, duration uint32) (bool, error) {
323331
defer C.free(unsafe.Pointer(objNameCStr))
324332

325333
C.jetkvm_ui_fade_out(objNameCStr, C.u_int32_t(duration))
326-
327334
return true, nil
328335
}
329336

@@ -333,13 +340,12 @@ func uiLabelSetText(objName string, text string) (bool, error) {
333340

334341
objNameCStr := C.CString(objName)
335342
defer C.free(unsafe.Pointer(objNameCStr))
336-
337343
textCStr := C.CString(text)
338344
defer C.free(unsafe.Pointer(textCStr))
339345

340346
ret := C.jetkvm_ui_set_text(objNameCStr, textCStr)
341347
if ret < 0 {
342-
return false, fmt.Errorf("failed to set text: %d", ret)
348+
return false, fmt.Errorf("failed to set %s text to %s: %d", objName, text, ret)
343349
}
344350
return ret == 0, nil
345351
}
@@ -350,21 +356,17 @@ func uiImgSetSrc(objName string, src string) (bool, error) {
350356

351357
objNameCStr := C.CString(objName)
352358
defer C.free(unsafe.Pointer(objNameCStr))
353-
354359
srcCStr := C.CString(src)
355360
defer C.free(unsafe.Pointer(srcCStr))
356361

357362
C.jetkvm_ui_set_image(objNameCStr, srcCStr)
358-
359363
return true, nil
360364
}
361365

362366
func uiDispSetRotation(rotation uint16) (bool, error) {
363367
cgoLock.Lock()
364368
defer cgoLock.Unlock()
365369

366-
nativeLogger.Info().Uint16("rotation", rotation).Msg("setting rotation")
367-
368370
cRotation := C.u_int16_t(rotation)
369371

370372
C.jetkvm_ui_set_rotation(cRotation)
@@ -383,7 +385,10 @@ func videoSetStreamQualityFactor(factor float64) error {
383385
cgoLock.Lock()
384386
defer cgoLock.Unlock()
385387

386-
C.jetkvm_video_set_quality_factor(C.float(factor))
388+
ret := C.jetkvm_video_set_quality_factor(C.float(factor))
389+
if ret < 0 {
390+
return fmt.Errorf("failed to set video quality factor to %f: %d", factor, ret)
391+
}
387392
return nil
388393
}
389394

@@ -401,7 +406,11 @@ func videoSetEDID(edid string) error {
401406

402407
edidCStr := C.CString(edid)
403408
defer C.free(unsafe.Pointer(edidCStr))
404-
C.jetkvm_video_set_edid(edidCStr)
409+
410+
ret := C.jetkvm_video_set_edid(edidCStr)
411+
if ret < 0 {
412+
return fmt.Errorf("failed to set EDID to %s: %d", edid, ret)
413+
}
405414
return nil
406415
}
407416

internal/native/chan.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ func (n *Native) handleVideoStateChan() {
3636
func (n *Native) handleLogChan() {
3737
for {
3838
entry := <-logChan
39-
l := n.nativeContext.
39+
l := GetNativeLogger().
40+
With().
4041
Str("file", entry.File).
4142
Str("func", entry.FuncName).
4243
Int("line", entry.Line)

internal/native/display.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,18 +99,21 @@ func (n *Native) DisplaySetRotation(rotation uint16) (bool, error) {
9999

100100
// UpdateLabelIfChanged updates the label if the text has changed
101101
func (n *Native) UpdateLabelIfChanged(objName string, newText string) {
102-
l := n.displayContext.Trace().Str("obj", objName).Str("text", newText)
102+
logger := GetDisplayLogger().
103+
With().
104+
Str("obj", objName).
105+
Str("text", newText)
103106

104107
changed, err := n.UIObjSetLabelText(objName, newText)
105108
if err != nil {
106-
n.displayContext.Warn().Str("obj", objName).Str("text", newText).Err(err).Msg("failed to update label")
109+
logger.Warn().Err(err).Msg("failed to update label")
107110
return
108111
}
109112

110113
if changed {
111-
l.Msg("label changed")
114+
logger.Trace().Msg("label changed")
112115
} else {
113-
l.Msg("label not changed")
116+
logger.Trace().Msg("label not changed")
114117
}
115118
}
116119

@@ -134,11 +137,18 @@ func (n *Native) SwitchToScreenIf(screenName string, shouldSwitch []string) {
134137
if currentScreen == screenName {
135138
return
136139
}
140+
141+
logger := GetDisplayLogger().
142+
With().
143+
Str("from", currentScreen).
144+
Str("to", screenName).
145+
Strs("from_screens", shouldSwitch)
146+
137147
if len(shouldSwitch) > 0 && !slices.Contains(shouldSwitch, currentScreen) {
138-
n.displayContext.Trace().Str("from", currentScreen).Str("to", screenName).Msg("skipping screen switch")
148+
logger.Trace().Msg("skipping screen switch")
139149
return
140150
}
141-
n.displayContext.Info().Str("from", currentScreen).Str("to", screenName).Msg("switching screen")
151+
logger.Info().Msg("switching screen")
142152
uiSwitchToScreen(screenName)
143153
}
144154

0 commit comments

Comments
 (0)