Skip to content

Commit a105176

Browse files
Fix TSan warnings in RMI. (#305)
We are periodically seeing some warnings, but those might be inside of ZMQ. At any rate, things are looking much better as far as RMI TSan is concerned. Signed-off-by: Samuel K. Gutierrez <[email protected]>
1 parent ad3e042 commit a105176

File tree

1 file changed

+9
-17
lines changed

1 file changed

+9
-17
lines changed

src/qvi-rmi.cc

+9-17
Original file line numberDiff line numberDiff line change
@@ -307,29 +307,21 @@ rpc_req(
307307
Types &&...args
308308
) {
309309
qvi_bbuff *buff = nullptr;
310-
int rc = rpc_pack(&buff, fid, std::forward<Types>(args)...);
310+
const int rc = rpc_pack(&buff, fid, std::forward<Types>(args)...);
311311
if (qvi_unlikely(rc != QV_SUCCESS)) {
312312
qvi_bbuff_delete(&buff);
313313
return rc;
314314
}
315-
// Cache buffer size here because our call to qvi_bbuff_size() after
316-
// zmsg_send() may be invalid because msg_free_byte_buffer_cb() may have
317-
// already been called.
318-
const int buffer_size = (int)buff->size();
319315

320-
zmq_msg_t msg;
321-
rc = zmsg_init_from_bbuff(buff, &msg);
322-
if (qvi_unlikely(rc != QV_SUCCESS)) goto out;
323-
324-
int nbytes_sent;
325-
rc = zmsg_send(zsock, &msg, &nbytes_sent);
326-
if (qvi_unlikely(nbytes_sent != buffer_size)) {
327-
zerr_msg("zmq_msg_send() truncated", errno);
328-
rc = QV_ERR_RPC;
316+
const int buff_size = buff->size();
317+
const int nbsent = zmq_send(zsock, buff->data(), buff_size, 0);
318+
if (qvi_unlikely(nbsent != buff_size)) {
319+
zerr_msg("zmq_send() truncated", errno);
320+
return QV_ERR_RPC;
329321
}
330-
out:
331-
if (qvi_unlikely(rc != QV_SUCCESS)) zmq_msg_close(&msg);
332-
// Else freeing of buffer and message resources is done for us.
322+
// We are resposible for freeing the buffer after ZMQ has
323+
// taken ownership of its contents after zmq_send() returns.
324+
qvi_bbuff_delete(&buff);
333325
return rc;
334326
}
335327

0 commit comments

Comments
 (0)