feat: enhance SecureConnection Close method for safety and idempotency
Kim committed
Nov 13, 2025 at 19:12 UTC
529c9b3735a67e239de59af7d33515481e1eef12
1 file changed
+12
-5
portal/core/cryptoops/handshaker.go
+12
-5
@@ -109,6 +109,10 @@ type SecureConnection struct {
109
decryptor cipher.AEAD
110
111
readBuffer *bytebufferpool.ByteBuffer
112
+
113
+ // Ensure Close is safe and idempotent
114
+ closeOnce sync.Once
115
+ closeErr error
116
}
117
118
func (r *SecureConnection) SetDeadline(t time.Time) error {
@@ -242,11 +246,14 @@ func (sc *SecureConnection) Read(p []byte) (int, error) {
246
247
// Close closes the underlying connection and releases resources
248
func (sc *SecureConnection) Close() error {
245
- if sc.readBuffer != nil {
246
- releaseBuffer(sc.readBuffer)
247
- sc.readBuffer = nil
248
- }
249
- return sc.conn.Close()
249
+ sc.closeOnce.Do(func() {
250
+ if sc.readBuffer != nil {
251
+ releaseBuffer(sc.readBuffer)
252
+ sc.readBuffer = nil
253
+ }
254
+ sc.closeErr = sc.conn.Close()
255
+ })
256
+ return sc.closeErr
257
}
258
259
// ClientHandshake performs the client-side of the handshake