Skip to content

Commit

Permalink
cleanup on goroutines staying around found bug in singbox updated to …
Browse files Browse the repository at this point in the history
…last version seems to be working bug issue: SagerNet/sing-box#633
  • Loading branch information
uussoop committed Sep 7, 2023
1 parent 81dbdf1 commit 2497414
Show file tree
Hide file tree
Showing 6 changed files with 224 additions and 221 deletions.
139 changes: 66 additions & 73 deletions core/singbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,55 +18,50 @@ import (

var disableColor bool

func RunByLinkDep(wg *sync.WaitGroup, config *[]byte) error {
osSignals := make(chan os.Signal, 1)
signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
defer signal.Stop(osSignals)
for {
// wg,
instance, cancel, err := createByLink(config)
if err != nil {
fmt.Println(err)
}

for {
osSignal := <-osSignals
if osSignal == syscall.SIGHUP {

if err != nil {
log.Error(E.Cause(err, "reload service"))
continue
}
}
cancel()
closeCtx, closed := context.WithCancel(context.Background())
go closeMonitor(closeCtx)
instance.Close()
closed()
if osSignal != syscall.SIGHUP {
return nil
}
break
}
}
}
// func RunByLinkDep(wg *sync.WaitGroup, config *[]byte) error {
// osSignals := make(chan os.Signal, 1)
// signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
// defer signal.Stop(osSignals)
// for {
// // wg,
// instance, err := createByLink(config)
// if err != nil {
// fmt.Println(err)
// }

// for {
// osSignal := <-osSignals
// if osSignal == syscall.SIGHUP {

// if err != nil {
// log.Error(E.Cause(err, "reload service"))
// continue
// }
// }

// closeCtx, closed := context.WithCancel(context.Background())
// go closeMonitor(closeCtx)
// instance.Close()
// closed()
// if osSignal != syscall.SIGHUP {
// return nil
// }
// break
// }
// }
// }
func RunByLink(wg *sync.WaitGroup, config *[]byte, ctx context.Context, kills *chan bool) error {
osSignals := make(chan os.Signal, 1)
signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
defer signal.Stop(osSignals)
// osSignals := make(chan os.Signal, 1)
// signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
// defer signal.Stop(osSignals)
for {
instance, cancel, err := createByLink(config)
instance, err := createByLink(config, ctx)
if err != nil {

wg.Done()
return err
}
if cancel == nil {
//return new error
wg.Done()

return errors.New("cancel is nil")
}
if instance == nil {

//return new error
Expand All @@ -82,28 +77,24 @@ func RunByLink(wg *sync.WaitGroup, config *[]byte, ctx context.Context, kills *c
// exit gracefully
fmt.Println("Context is done3")

cancel()

closeCtx, closed := context.WithCancel(ctx)
go closeMonitor(closeCtx)
// closeCtx, closed := context.WithCancel(ctx)
// go closeMonitor(closeCtx)

instance.Close()

closed()
// closed()
return nil

case k := <-*kills:

if k {
fmt.Println("kill")
closeCtx, closed := context.WithCancel(ctx)
go closeMonitor(closeCtx)

cancel()
// closeCtx, closed := context.WithCancel(ctx)
// go closeMonitor(closeCtx)

instance.Close()

closed()
// closed()

return nil
}
Expand Down Expand Up @@ -224,49 +215,51 @@ func createByLinkProxy(config *[]byte) (*box.Box, context.CancelFunc, error) {
}
return instance, cancel, nil
}
func createByLink(config *[]byte) (*box.Box, context.CancelFunc, error) {

// , context.CancelFunc
func createByLink(config *[]byte, ctx context.Context) (*box.Box, error) {

var options option.Options
err := options.UnmarshalJSON(*config)

if err != nil {
return nil, nil, err
return nil, err
}
if disableColor {
if options.Log == nil {
options.Log = &option.LogOptions{}
}
options.Log.DisableColor = true
}
ctx, cancel := context.WithCancel(context.Background())
// ctx, cancel := context.WithCancel(context.Background())
instance, err := box.New(box.Options{
Context: ctx,
Options: options,
})
if err != nil {
cancel()
return nil, nil, E.Cause(err, "create service")
// cancel()
return nil, E.Cause(err, "create service")
}
osSignals := make(chan os.Signal, 1)
signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)

defer func() {
signal.Stop(osSignals)
close(osSignals)
}()

go func() {
_, loaded := <-osSignals
if loaded {
cancel()
}
}()
// osSignals := make(chan os.Signal, 1)
// signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)

// defer func() {
// signal.Stop(osSignals)
// close(osSignals)
// }()

// go func() {
// _, loaded := <-osSignals
// if loaded {
// cancel()
// }
// }()
err = instance.Start()
if err != nil {
cancel()
return nil, nil, E.Cause(err, "start service")
// cancel()
return nil, E.Cause(err, "start service")
}
return instance, cancel, nil
return instance, nil
}
func create(wg *sync.WaitGroup) (*box.Box, context.CancelFunc, error) {
var (
Expand Down
1 change: 1 addition & 0 deletions foreignusage/api/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func testHandler(c *gin.Context) {
case <-done:
fmt.Println("test done")
cancel()
return

}

Expand Down
6 changes: 0 additions & 6 deletions foreignusage/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,4 @@ func InitService(certFile, keyFile *string) {
api.InitRouter().Run(fmt.Sprintf("%s:%s", addr, port))
}

// err := api.InitRouter().Run(":" + port)

// if err != nil {
// return
// }

}
81 changes: 39 additions & 42 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,44 @@ module github.com/Kawaii-Konnections-KK-Limited/Hayasashiken
go 1.19

require (
github.com/sagernet/sing v0.2.7
github.com/sagernet/sing-box v1.3.0
gorm.io/driver/sqlite v1.5.2
github.com/gin-contrib/cors v1.4.0
github.com/gin-gonic/gin v1.9.1
github.com/sagernet/sing v0.2.10-0.20230830132630-30bf19f2833c
github.com/sagernet/sing-box v1.4.1
gorm.io/gorm v1.25.2
)

require (
berty.tech/go-libtor v1.0.385 // indirect
github.com/Dreamacro/clash v1.16.0 // indirect
github.com/Dreamacro/protobytes v0.0.0-20230324064118-87bc784139cd // indirect
github.com/Dreamacro/clash v1.17.0 // indirect
github.com/Dreamacro/protobytes v0.0.0-20230617041236-6500a9f4f158 // indirect
github.com/ajg/form v1.5.1 // indirect
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/bytedance/sonic v1.9.1 // indirect
github.com/caddyserver/certmagic v0.18.2 // indirect
github.com/caddyserver/certmagic v0.19.2 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/cloudflare/circl v1.2.1-0.20221019164342-6ab4dfed8f3c // indirect
github.com/cretz/bine v0.2.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/cors v1.4.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/gin-gonic/gin v1.9.1 // indirect
github.com/go-chi/chi/v5 v5.0.8 // indirect
github.com/go-chi/chi/v5 v5.0.10 // indirect
github.com/go-chi/cors v1.2.1 // indirect
github.com/go-chi/render v1.0.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-chi/render v1.0.3 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.14.0 // indirect
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/gofrs/uuid/v5 v5.0.0 // indirect
github.com/golang/mock v1.6.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/btree v1.1.2 // indirect
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/insomniacslk/dhcp v0.0.0-20230612134759-b20c9ba983df // indirect
github.com/insomniacslk/dhcp v0.0.0-20230816195147-b3ca2534940d // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/josharian/native v1.1.0 // indirect
Expand All @@ -51,61 +51,58 @@ require (
github.com/libdns/libdns v0.2.1 // indirect
github.com/logrusorgru/aurora v2.0.3+incompatible // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mattn/go-sqlite3 v1.14.17 // indirect
github.com/mholt/acmez v1.2.0 // indirect
github.com/miekg/dns v1.1.55 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/onsi/ginkgo/v2 v2.2.0 // indirect
github.com/onsi/ginkgo/v2 v2.9.5 // indirect
github.com/ooni/go-libtor v1.1.8 // indirect
github.com/oschwald/maxminddb-golang v1.11.0 // indirect
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/pierrec/lz4/v4 v4.1.14 // indirect
github.com/pires/go-proxyproto v0.7.0 // indirect
github.com/quic-go/qpack v0.4.0 // indirect
github.com/quic-go/qtls-go1-18 v0.2.0 // indirect
github.com/quic-go/qtls-go1-19 v0.3.2 // indirect
github.com/quic-go/qtls-go1-20 v0.2.2 // indirect
github.com/quic-go/qtls-go1-20 v0.3.3 // indirect
github.com/sagernet/cloudflare-tls v0.0.0-20221031050923-d70792f4c3a0 // indirect
github.com/sagernet/go-tun2socks v1.16.12-0.20220818015926-16cb67876a61 // indirect
github.com/sagernet/gvisor v0.0.0-20230627031050-1ab0276e0dd2 // indirect
github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 // indirect
github.com/sagernet/quic-go v0.0.0-20230615020047-10f05c797c02 // indirect
github.com/sagernet/quic-go v0.0.0-20230825040534-0cd917b2ddda // indirect
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 // indirect
github.com/sagernet/sing-dns v0.1.6 // indirect
github.com/sagernet/sing-mux v0.1.0 // indirect
github.com/sagernet/sing-shadowsocks v0.2.2 // indirect
github.com/sagernet/sing-shadowsocks2 v0.1.1 // indirect
github.com/sagernet/sing-shadowtls v0.1.2 // indirect
github.com/sagernet/sing-tun v0.1.8 // indirect
github.com/sagernet/sing-vmess v0.1.6 // indirect
github.com/sagernet/sing-dns v0.1.9-0.20230824120133-4d5cbceb40c1 // indirect
github.com/sagernet/sing-mux v0.1.3-0.20230830095209-2a10ebd53ba8 // indirect
github.com/sagernet/sing-shadowsocks v0.2.4 // indirect
github.com/sagernet/sing-shadowsocks2 v0.1.3 // indirect
github.com/sagernet/sing-shadowtls v0.1.4 // indirect
github.com/sagernet/sing-tun v0.1.12-0.20230821065522-7545dc2d5641 // indirect
github.com/sagernet/sing-vmess v0.1.7 // indirect
github.com/sagernet/smux v0.0.0-20230312102458-337ec2a5af37 // indirect
github.com/sagernet/tfo-go v0.0.0-20230303015439-ffcfd8c41cf9 // indirect
github.com/sagernet/tfo-go v0.0.0-20230816093905-5a5c285d44a6 // indirect
github.com/sagernet/utls v0.0.0-20230309024959-6732c2ab36f2 // indirect
github.com/sagernet/websocket v0.0.0-20220913015213-615516348b4e // indirect
github.com/sagernet/wireguard-go v0.0.0-20230420044414-a7bac1754e77 // indirect
github.com/sagernet/wireguard-go v0.0.0-20230807125731-5d4a7ef2dc5f // indirect
github.com/scjalliance/comshim v0.0.0-20230315213746-5e51f40bd3b9 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 // indirect
github.com/zeebo/blake3 v0.2.3 // indirect
go.etcd.io/bbolt v1.3.7 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.24.0 // indirect
go4.org/netipx v0.0.0-20230303233057-f1b76eb4bb35 // indirect
go.uber.org/zap v1.25.0 // indirect
go4.org/netipx v0.0.0-20230824141953-6213f710f925 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.10.0 // indirect
golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect
golang.org/x/mod v0.11.0 // indirect
golang.org/x/net v0.11.0 // indirect
golang.org/x/sys v0.9.0 // indirect
golang.org/x/text v0.10.0 // indirect
golang.org/x/crypto v0.12.0 // indirect
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.10.0 // indirect
google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect
google.golang.org/grpc v1.56.1 // indirect
google.golang.org/protobuf v1.30.0 // indirect
golang.org/x/tools v0.12.1-0.20230815132531-74c255bcf846 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect
google.golang.org/grpc v1.57.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.2.1 // indirect
)
Loading

0 comments on commit 2497414

Please sign in to comment.