@@ -23,15 +23,14 @@ import (
23
23
)
24
24
25
25
// Resume implements tcpip.ResumableEndpoint.Resume.
26
- func (e * Endpoint ) Resume (s * stack.Stack ) {
26
+ func (e * Endpoint ) Resume (s * stack.Stack ) error {
27
27
e .mu .Lock ()
28
28
defer e .mu .Unlock ()
29
29
30
30
e .stack = s
31
-
32
31
for m := range e .multicastMemberships {
33
32
if err := e .stack .JoinGroup (e .netProto , m .nicID , m .multicastAddr ); err != nil {
34
- panic ( fmt .Sprintf ("e.stack.JoinGroup(%d, %d, %s): %s" , e .netProto , m .nicID , m .multicastAddr , err ) )
33
+ return fmt .Errorf ("e.stack.JoinGroup(%d, %d, %s): %s" , e .netProto , m .nicID , m .multicastAddr , err )
35
34
}
36
35
}
37
36
@@ -42,17 +41,22 @@ func (e *Endpoint) Resume(s *stack.Stack) {
42
41
case transport .DatagramEndpointStateBound :
43
42
if info .ID .LocalAddress .BitLen () != 0 && ! e .isBroadcastOrMulticast (info .RegisterNICID , e .effectiveNetProto , info .ID .LocalAddress ) {
44
43
if e .stack .CheckLocalAddress (info .RegisterNICID , e .effectiveNetProto , info .ID .LocalAddress ) == 0 {
45
- panic ( fmt .Sprintf ("got e.stack.CheckLocalAddress(%d, %d, %s) = 0, want != 0" , info .RegisterNICID , e .effectiveNetProto , info .ID .LocalAddress ) )
44
+ return fmt .Errorf ("got e.stack.CheckLocalAddress(%d, %d, %s) = 0, want != 0" , info .RegisterNICID , e .effectiveNetProto , info .ID .LocalAddress )
46
45
}
47
46
}
48
47
case transport .DatagramEndpointStateConnected :
49
48
var err tcpip.Error
50
49
multicastLoop := e .ops .GetMulticastLoop ()
50
+ // Release the connectedRoute if present.
51
+ if e .connectedRoute != nil {
52
+ e .connectedRoute .Release ()
53
+ }
51
54
e .connectedRoute , err = e .stack .FindRoute (info .RegisterNICID , info .ID .LocalAddress , info .ID .RemoteAddress , e .effectiveNetProto , multicastLoop )
52
55
if err != nil {
53
- panic ( fmt .Sprintf ("e.stack.FindRoute(%d, %s, %s, %d, %t): %s" , info .RegisterNICID , info .ID .LocalAddress , info .ID .RemoteAddress , e .effectiveNetProto , multicastLoop , err ) )
56
+ return fmt .Errorf ("e.stack.FindRoute(%d, %s, %s, %d, %t): %s" , info .RegisterNICID , info .ID .LocalAddress , info .ID .RemoteAddress , e .effectiveNetProto , multicastLoop , err )
54
57
}
55
58
default :
56
59
panic (fmt .Sprintf ("unhandled state = %s" , state ))
57
60
}
61
+ return nil
58
62
}
0 commit comments