aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pipewire/core.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-12-03 01:29:19 +0900
committerOphestra <cat@gensokyo.uk>2025-12-03 01:35:43 +0900
commitc34439fc5fe52db3f346131bd6398da8a69fe0bf (patch)
tree57ae75188a59345416899c49186638e083147bc3 /internal/pipewire/core.go
parent32fb137bb2e6eed465e94fd791abfaaab40bf674 (diff)
internal/pipewire: collect non-protocol errors
These errors are recoverable and should not terminate event handling. Only terminate event handling for protocol errors or inconsistent state that makes further event handling impossible. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pipewire/core.go')
-rw-r--r--internal/pipewire/core.go36
1 files changed, 12 insertions, 24 deletions
diff --git a/internal/pipewire/core.go b/internal/pipewire/core.go
index 671bbd53..435aa89c 100644
--- a/internal/pipewire/core.go
+++ b/internal/pipewire/core.go
@@ -525,20 +525,16 @@ func (e *UnknownBoundIdError[E]) Error() string {
return "unknown bound proxy id " + strconv.Itoa(int(e.Id))
}
-func (core *Core) consume(opcode byte, files []int, unmarshal func(v any) error) error {
- if err := closeReceivedFiles(files...); err != nil {
- return err
- }
-
+func (core *Core) consume(opcode byte, files []int, unmarshal func(v any)) error {
+ closeReceivedFiles(files...)
switch opcode {
case PW_CORE_EVENT_INFO:
- return unmarshal(&core.Info)
+ unmarshal(&core.Info)
+ return nil
case PW_CORE_EVENT_DONE:
var done CoreDone
- if err := unmarshal(&done); err != nil {
- return err
- }
+ unmarshal(&done)
if done.ID == roundtripSyncID && done.Sequence == CoreSyncSequenceOffset+core.ctx.sequence-1 {
if core.done {
return ErrUnexpectedDone
@@ -553,16 +549,12 @@ func (core *Core) consume(opcode byte, files []int, unmarshal func(v any) error)
case PW_CORE_EVENT_ERROR:
var coreError CoreError
- if err := unmarshal(&coreError); err != nil {
- return err
- }
+ unmarshal(&coreError)
return &coreError
case PW_CORE_EVENT_BOUND_PROPS:
var boundProps CoreBoundProps
- if err := unmarshal(&boundProps); err != nil {
- return err
- }
+ unmarshal(&boundProps)
delete(core.ctx.pendingIds, boundProps.ID)
proxy, ok := core.ctx.proxy[boundProps.ID]
@@ -606,19 +598,15 @@ func (e *GlobalIDCollisionError) Error() string {
" stepping on previous id " + strconv.Itoa(int(e.ID)) + " for " + e.Previous.Type
}
-func (registry *Registry) consume(opcode byte, files []int, unmarshal func(v any) error) error {
- if err := closeReceivedFiles(files...); err != nil {
- return err
- }
-
+func (registry *Registry) consume(opcode byte, files []int, unmarshal func(v any)) error {
+ closeReceivedFiles(files...)
switch opcode {
case PW_REGISTRY_EVENT_GLOBAL:
var global RegistryGlobal
- if err := unmarshal(&global); err != nil {
- return err
- }
+ unmarshal(&global)
if object, ok := registry.Objects[global.ID]; ok {
- return &GlobalIDCollisionError{global.ID, &object, &global}
+ // this should never happen so is non-recoverable if it does
+ panic(&GlobalIDCollisionError{global.ID, &object, &global})
}
registry.Objects[global.ID] = global
return nil