File tree Expand file tree Collapse file tree 2 files changed +14
-20
lines changed
Expand file tree Collapse file tree 2 files changed +14
-20
lines changed Original file line number Diff line number Diff line change @@ -5,7 +5,6 @@ package tun
55import (
66 "context"
77 "errors"
8- "sync"
98 "sync/atomic"
109
1110 "github.com/sagernet/sing-tun/internal/gtcpip/header"
@@ -30,7 +29,6 @@ type nfqueueHandler struct {
3029 queue uint16
3130 outputMark uint32
3231 resetMark uint32
33- wg sync.WaitGroup
3432 closed atomic.Bool
3533}
3634
@@ -82,28 +80,25 @@ func (h *nfqueueHandler) Start() error {
8280 if err != nil {
8381 return E .Cause (err , "open nfqueue" )
8482 }
85- h .nfq = nfq
8683
8784 if err = nfq .SetOption (netlink .NoENOBUFS , true ); err != nil {
88- h . nfq .Close ()
85+ nfq .Close ()
8986 return E .Cause (err , "set nfqueue option" )
9087 }
9188
92- h .wg .Add (1 )
93- go func () {
94- defer h .wg .Done ()
95- err := nfq .RegisterWithErrorFunc (h .ctx , h .handlePacket , func (e error ) int {
96- if h .ctx .Err () != nil {
97- return 1
98- }
99- h .logger .Error ("nfqueue error: " , e )
100- return 0
101- })
102- if err != nil && h .ctx .Err () == nil {
103- h .logger .Error ("nfqueue register error: " , err )
89+ err = nfq .RegisterWithErrorFunc (h .ctx , h .handlePacket , func (e error ) int {
90+ if h .ctx .Err () != nil {
91+ return 1
10492 }
105- }()
93+ h .logger .Error ("nfqueue error: " , e )
94+ return 0
95+ })
96+ if err != nil {
97+ nfq .Close ()
98+ return E .Cause (err , "register nfqueue" )
99+ }
106100
101+ h .nfq = nfq
107102 return nil
108103}
109104
@@ -239,6 +234,5 @@ func (h *nfqueueHandler) Close() error {
239234 if h .nfq != nil {
240235 h .nfq .Close ()
241236 }
242- h .wg .Wait ()
243237 return nil
244238}
Original file line number Diff line number Diff line change @@ -143,9 +143,9 @@ func (r *autoRedirect) Start() error {
143143 ResetMark : r .effectiveResetMark (),
144144 })
145145 if err != nil {
146- r .logger .Warn ("nfqueue not available, pre-match disabled: " , err )
146+ r .logger .Warn ("nfqueue not available, pre-match disabled (missing nfnetlink_queue and nft_queue kernel module?) : " , err )
147147 } else if err = handler .Start (); err != nil {
148- r .logger .Warn ("nfqueue start failed, pre-match disabled: " , err )
148+ r .logger .Warn ("nfqueue start failed, pre-match disabled (missing nfnetlink_queue and nft_queue kernel module?) : " , err )
149149 } else {
150150 r .nfqueueHandler = handler
151151 r .nfqueueEnabled = true
You can’t perform that action at this time.
0 commit comments