From 5b42030f9dda26a364338dfbb82d70ed803c91bb Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Tue, 28 Jan 2025 16:14:27 -0500 Subject: [PATCH] Fix another "deadlock" in METADAPT-A What fucking idiot go developer decided recv from a nil channel locks the entire program. ?????? just have it return zero value and false. --- metadapta.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/metadapta.go b/metadapta.go index 392ee8b..2fda48b 100644 --- a/metadapta.go +++ b/metadapta.go @@ -181,15 +181,18 @@ func (this *transA) Send(method uint16, data []byte) error { } func (this *transA) Receive() (method uint16, data []byte, err error) { - message, ok := <- this.incoming.Receive() - if !ok { - if this.parent.err == nil { - return 0, nil, fmt.Errorf("could not receive message: %w", io.EOF) - } else { - return 0, nil, this.parent.err + receive := this.incoming.Receive() + if receive != nil { + if message, ok := <- receive; ok { + return message.method, message.payload, nil } } - return message.method, message.payload, nil + + if this.parent.err == nil { + return 0, nil, fmt.Errorf("could not receive message: %w", io.EOF) + } else { + return 0, nil, this.parent.err + } } type incomingMessage struct {