goczmq icon indicating copy to clipboard operation
goczmq copied to clipboard

use Poller on Router to receive message lead to memory leak

Open joeedt opened this issue 4 years ago • 0 comments

when i use Dealer send message and Router recv message through Router-Dealer broker, the memory used by Router grow fastly, even though Dealer stop send message, the memory will not be freeed.

broker:

        proxy := goczmq.NewProxy()
	if err := proxy.SetFrontend(goczmq.Router, "tcp://127.0.0.1:4444"); err != nil {
		panic(err)
	}

	if err := proxy.SetBackend(goczmq.Dealer, "tcp://127.0.0.1:4445"); err != nil {
		panic(err)
	}

delear:

	sock, err := goczmq.NewDealer("tcp://127.0.0.1:44444")
	if err != nil {
		panic(err)
	}
	defer sock.Destroy()

	for {
		data := make([]byte, 10)
		sock.SendFrame(data, goczmq.FlagNone)
	}

router:

	sock := goczmq.NewSock(goczmq.Router)
	if err := sock.Attach("tcp://127.0.0.1:44445", false); err != nil {
		panic(err)
	}
	defer sock.Destroy()

	for {
		poller, err := goczmq.NewPoller(sock)
		if err != nil {
			panic(err)
		}
		defer poller.Destroy()

		if hitsock, err := poller.Wait(3000); err != nil {
			panic(err)
		} else if hitsock == nil {
			fmt.Println("wait timeout")
			continue
		} else {
			msg, err := hitsock.RecvMessage()
			fmt.Println(err, msg)
		}
	}

joeedt avatar Aug 28 '20 07:08 joeedt