Skip to content

connection panic When close #1483

@unJASON

Description

@unJASON

Expected behavior

no panic

Actual behavior

panic

Steps to reproduce

panic: sync: WaitGroup is reused before previous Wait has returned

goroutine 129942961 gp=0xc0127e4540 m=3 mp=0xc00006d008 [running]:
panic({0x12d3ae0?, 0x1792360?})
        /home/jenkins/go1.25/src/runtime/panic.go:802 +0x168 fp=0xc002f1fe50 sp=0xc002f1fda0 pc=0x48ea28
sync.(*WaitGroup).Wait(0xc02b974378)
        /home/jenkins/go1.25/src/sync/waitgroup.go:208 +0xf4 fp=0xc002f1fe78 sp=0xc002f1fe50 pc=0x4b01b4
github.com/apache/pulsar-client-go/pulsar/internal.(*connection).failLeftRequestsWhenClose(0xc02b9742c0)
        /home/jenkins/go/pkg/mod/github.com/apache/pulsar-client-go@v0.17.0/pulsar/internal/connection.go:378 +0x25 fp=0xc002f1feb8 sp=0xc002f1fe78 pc=0xc0c745
github.com/apache/pulsar-client-go/pulsar/internal.(*connection).run(0xc02b9742c0)
        /home/jenkins/go/pkg/mod/github.com/apache/pulsar-client-go@v0.17.0/pulsar/internal/connection.go:430 +0x3bf fp=0xc002f1ffc0 sp=0xc002f1feb8 pc=0xc0cc7f
github.com/apache/pulsar-client-go/pulsar/internal.(*connection).start.func1()
        /home/jenkins/go/pkg/mod/github.com/apache/pulsar-client-go@v0.17.0/pulsar/internal/connection.go:240 +0x65 fp=0xc002f1ffe0 sp=0xc002f1ffc0 pc=0xc0ba65
runtime.goexit({})
        /home/jenkins/go1.25/src/runtime/asm_amd64.s:1693 +0x1 fp=0xc002f1ffe8 sp=0xc002f1ffe0 pc=0x4976a1
created by github.com/apache/pulsar-client-go/pulsar/internal.(*connection).start in goroutine 129886168
        /home/jenkins/go/pkg/mod/github.com/apache/pulsar-client-go@v0.17.0/pulsar/internal/connection.go:236 +0x68

close connection while sending data demo code like this:

package main

import (
	"fmt"
	"sync"
	"time"
)

func simulateConnectionFuncCall(wg *sync.WaitGroup)  {
	wg.Add(1)
	time.Sleep(100 * time.Millisecond)
	wg.Done() 
}

func demoPanic(){
	wg := &sync.WaitGroup{}
	// one goroutine send something
	go func(wg *sync.WaitGroup) {
		for j:=0;j< 100;j++{
			simulateConnectionFuncCall(wg)
        }
	}(wg)


	time.Sleep(200*time.Millisecond)
	// sync.(*WaitGroup).Wait panic(waitgroup.go:208)
	wg.Wait()
	fmt.Printf("done")
}
func main() {
	//demo()
	demoPanic()
	return
}

System configuration

Pulsar version: 2.6.x
sdk version: 0.17.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions