Panic: concurrent write to websocket connection when sending WebSocket events (0.7.2)
Maintainer thường phản hồi trong vòng 5 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 52/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- go
- Lĩnh vực
- backend, networking
Hướng nghiên cứu
Bắt đầu bằng cách kiểm tra pkg/events/websocket/websocket_producer.go ở dòng 127, sau đó lần theo các caller được hiển thị trong pkg/whatsmeow/service/whatsmeow.go ở các dòng 2191 và 2305. Tái hiện việc phân phối sự kiện đồng thời, xác minh rằng các thao tác ghi vào một kết nối WebSocket không còn gây panic, và thêm hoặc chạy một regression test nếu repository có coverage cho producer này.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Welcome!
- Yes, I have searched for similar issues on GitHub and found none.
What did you do?
O erro ocorreu durante a utilização normal da EvolutionGo
A aplicação estava conectada ao WhatsApp e processando eventos normalmente quando, em determinado momento, ocorreu um panic que encerrou completamente o processo.
Eu consegui identificar um passo exato para reproduzir o problema de forma consistente, ele ocorreu durante o processamento simultâneo de eventos. Principalmente quando estamos recebendo muita mensagem e lendo mensagem.
Mas identifiquei que quando usamos o evento para restaurar o histórico de conversas, caso ultrapasse mais de 50 mensagens de acordo com os logs, ele da Panic e encerra e todas as instancias são desconectadas
Pelo stack trace, o panic acontece dentro de websocketProducer.Produce(), durante a chamada de WriteJSON() da biblioteca Gorilla WebSocket.
What did you expect?
Esperava que a aplicação continuasse processando e enviando os eventos normalmente, sem encerrar o processo.
Mesmo com múltiplos eventos sendo processados ao mesmo tempo, a escrita na conexão WebSocket deveria ser sincronizada para evitar concorrência.
What did you observe instead of what you expected?
A aplicação encerra com o seguinte panic:
panic: concurrent write to websocket connection
O stack trace indica que múltiplas goroutines estão tentando escrever simultaneamente na mesma conexão WebSocket, resultando no encerramento da EvolutionGo.
Stack trace:
panic: concurrent write to websocket connection
goroutine 969 [running]:
github.com/gorilla/websocket.(*messageWriter).flushFrame(0xc0013019e0, 0x1, {0x0?, 0x47c305?, 0x30?})
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:617 +0x4af
github.com/gorilla/websocket.(*messageWriter).Close(0x7453cc47d201?)
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:731 +0x35
github.com/gorilla/websocket.(*Conn).beginMessage(0xc0017329a0, 0xc00158d800, 0x1)
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:480 +0x37
github.com/gorilla/websocket.(*Conn).NextWriter(0xc0017329a0, 0x1)
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:520 +0x3f
github.com/gorilla/websocket.(*Conn).WriteJSON(0x171ece0?, {0x171ece0, 0xc00158d7d0})
/go/pkg/mod/github.com/gorilla/[email protected]/json.go:24 +0x34
github.com/evolution-foundation/evolution-go/pkg/events/websocket.(*websocketProducer).Produce(0xc000590d00, {0xc0013e4db0, 0x2c}, {0xc0011c0480, 0x206, 0xc0016b9dd0?}, {0xc00004dc20, 0x24}, {0xc00004dc50, 0x24})
/build/pkg/events/websocket/websocket_producer.go:127 +0x42a
github.com/evolution-foundation/evolution-go/pkg/whatsmeow/service.(*whatsmeowService).sendToQueueOrWebhook(0xc0001fce10, 0xc000176a00, {0xc0013e4db0, 0x2c}, {0xc0011c0480, 0x206, 0x240})
/build/pkg/whatsmeow/service/whatsmeow.go:2305 +0x4f9
github.com/evolution-foundation/evolution-go/pkg/whatsmeow/service.(*whatsmeowService).CallWebhook(0xc0001fce10, 0xc000176a00, {0xc0013e4db0, 0x2c}, {0xc0011c0480, 0x206, 0x240})
/build/pkg/whatsmeow/service/whatsmeow.go:2191 +0x242b
created by github.com/evolution-foundation/evolution-go/pkg/whatsmeow/service.(*MyClient).myEventHandler in goroutine 967
/build/pkg/whatsmeow/service/whatsmeow.go:2098 +0x997e
...
Screenshots/Videos
No response
Which version are you using?
0.7.2
What is your environment?
Linux
If applicable, paste the log output
Sistema Operacional: Linux
Implantação: Docker
WebSocket: Habilitado
2026/07/03 09:31:20 [INFO] [] subscriptions [MESSAGE SEND_MESSAGE READ_RECEIPT PRESENCE HISTORY_SYNC CHAT_PRESENCE CALL CONNECTION LABEL CONTACT GROUP NEWSLETTER QRCODE BUTTON_CLICK] eventType Receipt
2026/07/03 09:31:20 [INFO] [] Event received of type Receipt
panic: concurrent write to websocket connection
goroutine 969 [running]:
github.com/gorilla/websocket.(*messageWriter).flushFrame(0xc0013019e0, 0x1, {0x0?, 0x47c305?, 0x30?})
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:617 +0x4af
github.com/gorilla/websocket.(*messageWriter).Close(0x7453cc47d201?)
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:731 +0x35
github.com/gorilla/websocket.(*Conn).beginMessage(0xc0017329a0, 0xc00158d800, 0x1)
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:480 +0x37
github.com/gorilla/websocket.(*Conn).NextWriter(0xc0017329a0, 0x1)
/go/pkg/mod/github.com/gorilla/[email protected]/conn.go:520 +0x3f
github.com/gorilla/websocket.(*Conn).WriteJSON(0x171ece0?, {0x171ece0, 0xc00158d7d0})
/go/pkg/mod/github.com/gorilla/[email protected]/json.go:24 +0x34
github.com/evolution-foundation/evolution-go/pkg/events/websocket.(*websocketProducer).Produce(0xc000590d00, {0xc0013e4db0, 0x2c}, {0xc0011c0480, 0x206, 0xc0016b9dd0?}, {0xc00004dc20, 0x24}, {0xc00004dc50, 0x24})
/build/pkg/events/websocket/websocket_producer.go:127 +0x42a
github.com/evolution-foundation/evolution-go/pkg/whatsmeow/service.(*whatsmeowService).sendToQueueOrWebhook(0xc0001fce10, 0xc000176a00, {0xc0013e4db0, 0x2c}, {0xc0011c0480, 0x206, 0x240})
/build/pkg/whatsmeow/service/whatsmeow.go:2305 +0x4f9
github.com/evolution-foundation/evolution-go/pkg/whatsmeow/service.(*whatsmeowService).CallWebhook(0xc0001fce10, 0xc000176a00, {0xc0013e4db0, 0x2c}, {0xc0011c0480, 0x206, 0x240})
/build/pkg/whatsmeow/service/whatsmeow.go:2191 +0x242b
created by github.com/evolution-foundation/evolution-go/pkg/whatsmeow/service.(*MyClient).myEventHandler in goroutine 967
/build/pkg/whatsmeow/service/whatsmeow.go:2098 +0x997e
Additional Notes
Na versão 0.7.0 isso não ocorria
- Ngôn ngữ chính
- Go
- Star
- 890
- Fork
- 473
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Có Dockerfile hoặc tệp Docker Compose
- Có mẫu pull request
- Không có hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của evolution-foundation/evolution-go
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
evolution-foundation/evolution-go#193 ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
evolution-foundation/evolution-go#104 ·
Maintainer thường phản hồi trong vòng 5 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
evolution-foundation/evolution-go#101 ·
Maintainer thường phản hồi trong vòng 5 ngày
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
evolution-foundation/evolution-go#97 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
evolution-foundation/evolution-go#204 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
Tất cả issue của evolution-foundation/evolution-go
Issue tương tự
-
automation models
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
txn2/mcp-data-platform#1984 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agentic-workflows
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Fix broken Code of Conduct linksĐang mởkind/docs prio/P2
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 95/100
agent-substrate/substrate#1986 ·
Maintainer thường phản hồi trong vòng 1 ngày