kiwi icon indicating copy to clipboard operation
kiwi copied to clipboard

export fatal err: Unlock of unlocked RWMutex

Open blokkskyver opened this issue 5 years ago • 1 comments

This function fails on store.Export()

func MakeStorage(){
	store := stdkiwi.NewStore()
	for i := 0; i < 10; i++ {
		res, err := http.Get("http://whatthecommit.com/index.txt")
		if err != nil {
			log.Fatal()
			return
		}
		if err := store.AddKey(strconv.Itoa(i), "str"); err != nil {
			panic(err)
		}
		comm := store.Str(strconv.Itoa(i))
		msg, err := ioutil.ReadAll(res.Body)
		if err != nil {
			log.Fatal(err)
			return
		}
		err = comm.Update(string(msg))
		if err != nil {
			log.Fatal(err)
			return
		}
		err = res.Body.Close()
		if err != nil {
			log.Fatal(err)
			return
		}
		log.Println("written", i, "to file")
	}
	js, err :=store.Export()
	if err != nil {
		log.Fatal(err)
		return
	}
	err = ioutil.WriteFile("commits.json", js, os.ModePerm)
	if err != nil {
		log.Fatal(err)
		return
	}
}
fatal error: sync: Unlock of unlocked RWMutex

goroutine 1 [running]:
runtime.throw(0x3e9b00, 0x20)
	C:/Go/src/runtime/panic.go:1116 +0x79 fp=0xc0000c9ca8 sp=0xc0000c9c78 pc=0x138a19
sync.throw(0x3e9b00, 0x20)
	C:/Go/src/runtime/panic.go:1102 +0x3c fp=0xc0000c9cc8 sp=0xc0000c9ca8 pc=0x16521c
sync.(*RWMutex).Unlock(0xc00020c080)
	C:/Go/src/sync/rwmutex.go:129 +0xc6 fp=0xc0000c9d00 sp=0xc0000c9cc8 pc=0x184006
github.com/sdslabs/kiwi.(*Store).Export(0xc0000985e0, 0x3, 0x3, 0x3dffd9, 0x6, 0xc000089280)
	C:/Users/poly/go/pkg/mod/github.com/sdslabs/[email protected]/store.go:279 +0x23b fp=0xc0000c9e70 sp=0xc0000c9d00 pc=0x1fe8db
github.com/po1yb1ank/gocommit/commitstorage.MakeStorage()
	C:/Users/poly/wsp/testt/gocommit/commitstorage/storage.go:41 +0x56a fp=0xc0000c9f78 sp=0xc0000c9e70 pc=0x3666aa
main.main()
	C:/Users/poly/wsp/testt/gocommit/commit.go:27 +0x27 fp=0xc0000c9f88 sp=0xc0000c9f78 pc=0x366847
runtime.main()
	C:/Go/src/runtime/proc.go:204 +0x209 fp=0xc0000c9fe0 sp=0xc0000c9f88 pc=0x13b1c9
runtime.goexit()
	C:/Go/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc0000c9fe8 sp=0xc0000c9fe0 pc=0x16a3a1

goroutine 5 [IO wait]:
internal/poll.runtime_pollWait(0x20ce113a708, 0x72, 0x439260)
	C:/Go/src/runtime/netpoll.go:222 +0x65
internal/poll.(*pollDesc).wait(0xc0000cf0b8, 0x72, 0x573300, 0x0, 0x0)
	C:/Go/src/internal/poll/fd_poll_runtime.go:87 +0x4c
internal/poll.execIO(0xc0000cef18, 0x3f82a0, 0xc00003ba01, 0x1be18d, 0x602fa544)
	C:/Go/src/internal/poll/fd_windows.go:175 +0x105
internal/poll.(*FD).Read(0xc0000cef00, 0xc000044000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	C:/Go/src/internal/poll/fd_windows.go:441 +0x2ff
net.(*netFD).Read(0xc0000cef00, 0xc000044000, 0x1000, 0x1000, 0x13b665, 0xc00003bb58, 0x1627e0)
	C:/Go/src/net/fd_posix.go:55 +0x56
net.(*conn).Read(0xc000006010, 0xc000044000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
	C:/Go/src/net/net.go:182 +0x95
net/http.(*persistConn).Read(0xc0000de6c0, 0xc000044000, 0x1000, 0x1000, 0xc000180000, 0xc00003bc58, 0x105ab5)
	C:/Go/src/net/http/transport.go:1887 +0x7c
bufio.(*Reader).fill(0xc00003e060)
	C:/Go/src/bufio/bufio.go:101 +0x10a
bufio.(*Reader).Peek(0xc00003e060, 0x1, 0x0, 0x0, 0x1, 0x0, 0xc000123920)
	C:/Go/src/bufio/bufio.go:139 +0x56
net/http.(*persistConn).readLoop(0xc0000de6c0)
	C:/Go/src/net/http/transport.go:2040 +0x1ba
created by net/http.(*Transport).dialConn
	C:/Go/src/net/http/transport.go:1708 +0xcd7

goroutine 6 [select]:
net/http.(*persistConn).writeLoop(0xc0000de6c0)
	C:/Go/src/net/http/transport.go:2340 +0x134
created by net/http.(*Transport).dialConn
	C:/Go/src/net/http/transport.go:1709 +0xcfc

  • go 1.15
  • github.com/sdslabs/kiwi v1.1.0

blokkskyver avatar Feb 19 '21 11:02 blokkskyver

Hey! Is this still an issue. I tested the same code on my machine and it works perfectly fine.

vrongmeal avatar May 05 '21 14:05 vrongmeal