You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bug#34854869 Incorrect handling of SSL_WANT_WRITE in ssl_writev()
ssl_writev() behaved incorrectly if it did only a partial write
of the buffered data it was supposed to write.
The Transporter layers protocol is such that a partial write should
not be retried internaly in the write implementations. Instead the
'written' bytes should be returned to the upper layers which does
the book keeping of the buffered data for each transporter,
which transporter having buffered data to read/write, balance the
read/write handling over the nodes/transporters, as well
as handling the errors/exception codes returned from the transportes -
deciding if the errors are retriable, or if the connection need to be
dropped.
NdbSocket::ssl_writev() did its own send-retries in case of partial
writes, which breaks the above protocol.
More severe; ssl_writev() made the incorrect assumption that all data
supplied to ssl_send() / send_several_iov() were actually sent.
Thus the iteration over the 'n' iovec[] were incorrectly maintained.
Patch removes the write-looping in ssl_writev() in case
of partial writes. The problem with maintaining sent iovec[] data
goes away as a side effect. (Upper transporter layers maintains it
and calls back with updated data pointers and length.)
Change-Id: If55afbeee72d747dc52cf779fdde5bd3a381352a
0 commit comments