Skip to content

Commit

Permalink
fix(plc4go): always supply stack when recovering
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Jun 7, 2023
1 parent 117d669 commit 78ae3b6
Show file tree
Hide file tree
Showing 43 changed files with 116 additions and 75 deletions.
3 changes: 2 additions & 1 deletion plc4go/internal/ads/Browser.go
Expand Up @@ -22,6 +22,7 @@ package ads
import (
"context"
"github.com/pkg/errors"
"runtime/debug"
"strings"

"github.com/apache/plc4x/plc4go/internal/ads/model"
Expand All @@ -45,7 +46,7 @@ func (m *Connection) BrowseWithInterceptor(ctx context.Context, browseRequest ap
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcBrowseRequestResult(browseRequest, nil, errors.Errorf("Recovered from panic: %v", err))
result <- spiModel.NewDefaultPlcBrowseRequestResult(browseRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
responseCodes := map[string]apiModel.PlcResponseCode{}
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/ads/Connection.go
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/options"
"github.com/apache/plc4x/plc4go/spi/tracer"
"github.com/rs/zerolog"
"runtime/debug"
"strconv"
"strings"

Expand Down Expand Up @@ -113,7 +114,7 @@ func (m *Connection) ConnectWithContext(ctx context.Context) <-chan plc4go.PlcCo
go func() {
defer func() {
if err := recover(); err != nil {
ch <- _default.NewDefaultPlcConnectionCloseResult(nil, errors.Errorf("Recovered from panic: %v", err))
ch <- _default.NewDefaultPlcConnectionCloseResult(nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
err := m.messageCodec.Connect()
Expand Down Expand Up @@ -170,7 +171,7 @@ func (m *Connection) setupConnection(ctx context.Context, ch chan plc4go.PlcConn
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed: %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
for message := range defaultIncomingMessageChannel {
Expand Down
3 changes: 2 additions & 1 deletion plc4go/internal/ads/Discoverer.go
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/rs/zerolog"
"net"
"net/url"
"runtime/debug"
"strconv"
"time"

Expand Down Expand Up @@ -145,7 +146,7 @@ func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.
go func(discoveryItem *discovery) {
defer func() {
if err := recover(); err != nil {
d.log.Error().Msgf("panic-ed %v", err)
d.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
buf := make([]byte, 1024)
Expand Down
13 changes: 7 additions & 6 deletions plc4go/internal/ads/Interactions.go
Expand Up @@ -22,6 +22,7 @@ package ads
import (
"context"
"fmt"
"runtime/debug"
"time"

"github.com/apache/plc4x/plc4go/protocols/ads/readwrite/model"
Expand All @@ -33,7 +34,7 @@ func (m *Connection) ExecuteAdsReadDeviceInfoRequest(ctx context.Context) (model
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
request := m.NewAdsReadDeviceInfoRequest()
Expand Down Expand Up @@ -74,7 +75,7 @@ func (m *Connection) ExecuteAdsReadRequest(ctx context.Context, indexGroup uint3
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
request := m.NewAdsReadRequest(indexGroup, indexOffset, length)
Expand Down Expand Up @@ -115,7 +116,7 @@ func (m *Connection) ExecuteAdsWriteRequest(ctx context.Context, indexGroup uint
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
request := m.NewAdsWriteRequest(indexGroup, indexOffset, data)
Expand Down Expand Up @@ -156,7 +157,7 @@ func (m *Connection) ExecuteAdsReadWriteRequest(ctx context.Context, indexGroup
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
request := m.NewAdsReadWriteRequest(indexGroup, indexOffset, readLength, items, writeData)
Expand Down Expand Up @@ -197,7 +198,7 @@ func (m *Connection) ExecuteAdsAddDeviceNotificationRequest(ctx context.Context,
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
request := m.NewAdsAddDeviceNotificationRequest(indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime)
Expand Down Expand Up @@ -238,7 +239,7 @@ func (m *Connection) ExecuteAdsDeleteDeviceNotificationRequest(ctx context.Conte
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
request := m.NewAdsDeleteDeviceNotificationRequest(notificationHandle)
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/ads/Reader.go
Expand Up @@ -23,6 +23,7 @@ import (
"context"
"encoding/binary"
"fmt"
"runtime/debug"
"strings"

"github.com/apache/plc4x/plc4go/internal/ads/model"
Expand All @@ -46,7 +47,7 @@ func (m *Connection) Read(ctx context.Context, readRequest apiModel.PlcReadReque
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcReadRequestResult(readRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcReadRequestResult(readRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
if len(readRequest.GetTagNames()) <= 1 {
Expand Down Expand Up @@ -97,7 +98,7 @@ func (m *Connection) singleRead(ctx context.Context, readRequest apiModel.PlcRea
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcReadRequestResult(readRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcReadRequestResult(readRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
response, err := m.ExecuteAdsReadRequest(ctx, directAdsTag.IndexGroup, directAdsTag.IndexOffset, directAdsTag.DataType.GetSize())
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/ads/Subscriber.go
Expand Up @@ -22,6 +22,7 @@ package ads
import (
"context"
"github.com/apache/plc4x/plc4go/spi/options"
"runtime/debug"
"time"

dirverModel "github.com/apache/plc4x/plc4go/internal/ads/model"
Expand Down Expand Up @@ -99,7 +100,7 @@ func (m *Connection) Subscribe(ctx context.Context, subscriptionRequest apiModel
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
// Iterate over all sub-results
Expand Down Expand Up @@ -128,7 +129,7 @@ func (m *Connection) subscribe(ctx context.Context, subscriptionRequest apiModel
go func() {
defer func() {
if err := recover(); err != nil {
responseChan <- spiModel.NewDefaultPlcSubscriptionRequestResult(subscriptionRequest, nil, errors.Errorf("panic-ed %v", err))
responseChan <- spiModel.NewDefaultPlcSubscriptionRequestResult(subscriptionRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
// At this point we are sure to only have single item direct tag requests.
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/ads/Writer.go
Expand Up @@ -23,6 +23,7 @@ import (
"context"
"encoding/binary"
"fmt"
"runtime/debug"
"strings"

"github.com/apache/plc4x/plc4go/internal/ads/model"
Expand All @@ -45,7 +46,7 @@ func (m *Connection) Write(ctx context.Context, writeRequest apiModel.PlcWriteRe
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
if len(writeRequest.GetTagNames()) <= 1 {
Expand Down Expand Up @@ -106,7 +107,7 @@ func (m *Connection) singleWrite(ctx context.Context, writeRequest apiModel.PlcW
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
response, err := m.ExecuteAdsWriteRequest(ctx, directAdsTag.IndexGroup, directAdsTag.IndexOffset, data)
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/bacnetip/Connection.go
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/utils"
"github.com/pkg/errors"
"github.com/rs/zerolog"
"runtime/debug"
"sync"
"time"

Expand Down Expand Up @@ -89,14 +90,14 @@ func (c *Connection) ConnectWithContext(ctx context.Context) <-chan plc4go.PlcCo
go func() {
defer func() {
if err := recover(); err != nil {
ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Errorf("panic-ed %v", err))
ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
connectionConnectResult := <-c.DefaultConnection.ConnectWithContext(ctx)
go func() {
defer func() {
if err := recover(); err != nil {
ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Errorf("panic-ed %v", err))
ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
for c.IsConnected() {
Expand Down
3 changes: 2 additions & 1 deletion plc4go/internal/cbus/Browser.go
Expand Up @@ -22,6 +22,7 @@ package cbus
import (
"context"
"fmt"
"runtime/debug"
"time"

plc4go "github.com/apache/plc4x/plc4go/pkg/api"
Expand Down Expand Up @@ -273,7 +274,7 @@ func (m Browser) getInstalledUnitAddressBytes(ctx context.Context) (map[byte]any
go func() {
defer func() {
if err := recover(); err != nil {
m.log.Error().Msgf("panic-ed %v", err)
m.log.Error().Msgf("panic-ed %v. Stack:\n%s", err, debug.Stack())
}
}()
defer readCtxCancel()
Expand Down
7 changes: 4 additions & 3 deletions plc4go/internal/cbus/Connection.go
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/tracer"
"github.com/apache/plc4x/plc4go/spi/transactions"
"github.com/rs/zerolog"
"runtime/debug"
"sync"
"time"

Expand Down Expand Up @@ -123,7 +124,7 @@ func (c *Connection) ConnectWithContext(ctx context.Context) <-chan plc4go.PlcCo
go func() {
defer func() {
if err := recover(); err != nil {
c.fireConnectionError(errors.Errorf("panic-ed %v", err), ch)
c.fireConnectionError(errors.Errorf("panic-ed %v. Stack:\n%s", err, debug.Stack()), ch)
}
}()
if err := c.messageCodec.Connect(); err != nil {
Expand Down Expand Up @@ -228,7 +229,7 @@ func (c *Connection) startSubscriptionHandler() {
go func() {
defer func() {
if err := recover(); err != nil {
c.log.Error().Msgf("panic-ed %v", err)
c.log.Error().Msgf("panic-ed %v. Stack:\n%s", err, debug.Stack())
}
}()
c.log.Debug().Msg("SAL handler stated")
Expand All @@ -248,7 +249,7 @@ func (c *Connection) startSubscriptionHandler() {
go func() {
defer func() {
if err := recover(); err != nil {
c.log.Error().Msgf("panic-ed %v", err)
c.log.Error().Msgf("panic-ed %v. Stack:\n%s", err, debug.Stack())
}
}()
c.log.Debug().Msg("default MMI started")
Expand Down
7 changes: 4 additions & 3 deletions plc4go/internal/cbus/Discoverer.go
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/rs/zerolog"
"net"
"net/url"
"runtime/debug"
"sync"
"sync/atomic"
"time"
Expand Down Expand Up @@ -90,7 +91,7 @@ func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.
go func(netInterface addressProvider, interfaceLog zerolog.Logger) {
defer func() {
if err := recover(); err != nil {
interfaceLog.Error().Msgf("panic-ed %v", err)
interfaceLog.Error().Msgf("panic-ed %v. Stack: %s", err, debug.Stack())
}
}()
defer func() { wg.Done() }()
Expand Down Expand Up @@ -124,7 +125,7 @@ func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.
go func(addressLogger zerolog.Logger) {
defer func() {
if err := recover(); err != nil {
addressLogger.Error().Msgf("panic-ed %v", err)
addressLogger.Error().Msgf("panic-ed %v. Stack: %s; ", err, debug.Stack())
}
}()
defer func() { wg.Done() }()
Expand Down Expand Up @@ -157,7 +158,7 @@ func (d *Discoverer) Discover(ctx context.Context, callback func(event apiModel.
go func() {
defer func() {
if err := recover(); err != nil {
d.log.Error().Msgf("panic-ed %v", err)
d.log.Error().Msgf("panic-ed %v. Stack: %s; ", err, debug.Stack())
}
}()
for transportInstance := range transportInstances {
Expand Down
3 changes: 2 additions & 1 deletion plc4go/internal/cbus/Reader.go
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/transactions"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"runtime/debug"
"sync"
"time"

Expand Down Expand Up @@ -64,7 +65,7 @@ func (m *Reader) Read(ctx context.Context, readRequest apiModel.PlcReadRequest)
func (m *Reader) readSync(ctx context.Context, readRequest apiModel.PlcReadRequest, result chan apiModel.PlcReadRequestResult) {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcReadRequestResult(readRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcReadRequestResult(readRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
numTags := len(readRequest.GetTagNames())
Expand Down
3 changes: 2 additions & 1 deletion plc4go/internal/cbus/Subscriber.go
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/options"
"github.com/pkg/errors"
"github.com/rs/zerolog"
"runtime/debug"
"strings"
"time"

Expand Down Expand Up @@ -56,7 +57,7 @@ func (m *Subscriber) Subscribe(_ context.Context, subscriptionRequest apiModel.P
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcSubscriptionRequestResult(subscriptionRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcSubscriptionRequestResult(subscriptionRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
internalPlcSubscriptionRequest := subscriptionRequest.(*spiModel.DefaultPlcSubscriptionRequest)
Expand Down
3 changes: 2 additions & 1 deletion plc4go/internal/cbus/Writer.go
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/options"
"github.com/apache/plc4x/plc4go/spi/transactions"
"github.com/rs/zerolog"
"runtime/debug"
"sync"
"time"

Expand Down Expand Up @@ -58,7 +59,7 @@ func (m *Writer) Write(ctx context.Context, writeRequest apiModel.PlcWriteReques
go func() {
defer func() {
if err := recover(); err != nil {
result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Errorf("panic-ed %v", err))
result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
numTags := len(writeRequest.GetTagNames())
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/eip/Connection.go
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/tracer"
"github.com/apache/plc4x/plc4go/spi/transactions"
"github.com/rs/zerolog"
"runtime/debug"
"time"

"github.com/apache/plc4x/plc4go/pkg/api"
Expand Down Expand Up @@ -125,7 +126,7 @@ func (m *Connection) ConnectWithContext(ctx context.Context) <-chan plc4go.PlcCo
go func() {
defer func() {
if err := recover(); err != nil {
ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Errorf("panic-ed %v", err))
ch <- _default.NewDefaultPlcConnectionConnectResult(nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
err := m.messageCodec.Connect()
Expand Down Expand Up @@ -156,7 +157,7 @@ func (m *Connection) Close() <-chan plc4go.PlcConnectionCloseResult {
go func() {
defer func() {
if err := recover(); err != nil {
result <- _default.NewDefaultPlcConnectionCloseResult(nil, errors.Errorf("panic-ed %v", err))
result <- _default.NewDefaultPlcConnectionCloseResult(nil, errors.Errorf("panic-ed %v. Stack: %s", err, debug.Stack()))
}
}()
m.log.Debug().Msg("Sending UnregisterSession EIP Packet")
Expand Down

0 comments on commit 78ae3b6

Please sign in to comment.