@@ -345,6 +345,7 @@ nixlDocaEngine::nixlDocaInitNotif (const std::string &remote_agent,
345345 notif->send_addr = (uint8_t *)calloc (notif->elems_size * notif->elems_num , sizeof (uint8_t ));
346346 if (notif->send_addr == nullptr ) {
347347 NIXL_ERROR << " Can't alloc memory for send notif" ;
348+ delete notif;
348349 return NIXL_ERR_BACKEND;
349350 }
350351 memset (notif->send_addr , 0 , notif->elems_size * notif->elems_num );
@@ -404,6 +405,8 @@ nixlDocaEngine::nixlDocaInitNotif (const std::string &remote_agent,
404405 delete notif->recv_mmap ;
405406 delete notif->recv_barr ;
406407
408+ delete notif;
409+
407410 return NIXL_ERR_BACKEND;
408411}
409412
@@ -695,6 +698,7 @@ nixlDocaEngine::addRdmaQp (const std::string &remote_agent) {
695698 return NIXL_SUCCESS;
696699
697700exit_error:
701+ delete rdma_qp;
698702 return NIXL_ERR_BACKEND;
699703}
700704
@@ -1050,15 +1054,15 @@ nixlDocaEngine::loadRemoteConnInfo (const std::string &remote_agent,
10501054 nixlDocaConnection conn;
10511055 size_t size = remote_conn_info.size ();
10521056 // TODO: eventually std::byte?
1053- char * addr = new char [size] ;
1057+ auto addr = std::make_unique< char []>(size) ;
10541058
10551059 if (remoteConnMap.find (remote_agent) != remoteConnMap.end ()) {
10561060 return NIXL_ERR_INVALID_PARAM;
10571061 }
10581062
1059- nixlSerDes::_stringToBytes ((void *)addr, remote_conn_info, size);
1063+ nixlSerDes::_stringToBytes ((void *)addr. get () , remote_conn_info, size);
10601064
1061- int ret = oob_connection_client_setup (addr, &oob_sock_client);
1065+ int ret = oob_connection_client_setup (addr. get () , &oob_sock_client);
10621066 if (ret < 0 ) {
10631067 NIXL_ERROR << " Can't connect to server " << ret;
10641068 return NIXL_ERR_BACKEND;
@@ -1082,8 +1086,6 @@ nixlDocaEngine::loadRemoteConnInfo (const std::string &remote_agent,
10821086
10831087 close (oob_sock_client);
10841088
1085- delete[] addr;
1086-
10871089 return NIXL_SUCCESS;
10881090}
10891091
@@ -1103,6 +1105,7 @@ nixlDocaEngine::registerMem (const nixlBlobDesc &mem,
11031105 });
11041106 if (it == gdevs.end ()) {
11051107 NIXL_ERROR << " Can't register memory for unknown device " << mem.devId ;
1108+ delete priv;
11061109 return NIXL_ERR_INVALID_PARAM;
11071110 }
11081111
@@ -1137,7 +1140,7 @@ nixlDocaEngine::registerMem (const nixlBlobDesc &mem,
11371140error:
11381141 delete priv->mem .mmap ;
11391142 delete priv->mem .barr ;
1140-
1143+ delete priv;
11411144 return NIXL_ERR_BACKEND;
11421145}
11431146
@@ -1173,16 +1176,16 @@ nixlDocaEngine::loadRemoteMD (const nixlBlobDesc &input,
11731176
11741177 if (search == remoteConnMap.end ()) {
11751178 NIXL_ERROR << " err: remote connection not found remote_agent " << remote_agent;
1176- return NIXL_ERR_NOT_FOUND ;
1179+ goto error ;
11771180 }
1178-
11791181 conn = (nixlDocaConnection)search->second ;
11801182
11811183 // directly copy underlying conn struct
11821184 md->conn = conn;
11831185
11841186 // Empty mmap, filled with imported data
11851187 try {
1188+ md->mem .mmap = nullptr ;
11861189 md->mem .mmap = new nixlDocaMmap ();
11871190 } catch (const std::exception &e) {
11881191 goto error;
@@ -1192,11 +1195,12 @@ nixlDocaEngine::loadRemoteMD (const nixlBlobDesc &input,
11921195 if (result != DOCA_SUCCESS) {
11931196 NIXL_ERROR << " Function doca_mmap_create_from_export failed "
11941197 << doca_error_get_descr (result);
1195- return NIXL_ERR_BACKEND ;
1198+ goto error ;
11961199 }
11971200
11981201 /* Remote buffer array */
11991202 try {
1203+ md->mem .barr = nullptr ;
12001204 md->mem .barr = new nixlDocaBarr (md->mem .mmap ->mmap , 1 , (size_t )size, gdevs[0 ].second );
12011205 } catch (const std::exception &e) {
12021206 goto error;
@@ -1208,7 +1212,8 @@ nixlDocaEngine::loadRemoteMD (const nixlBlobDesc &input,
12081212
12091213error:
12101214 delete md->mem .barr ;
1211-
1215+ delete md->mem .mmap ;
1216+ delete md;
12121217 return NIXL_ERR_BACKEND;
12131218}
12141219
@@ -1246,14 +1251,21 @@ nixlDocaEngine::prepXfer (const nixl_xfer_op_t &operation,
12461251 auto search = qpMap.find (remote_agent);
12471252 if (search == qpMap.end ()) {
12481253 NIXL_ERROR << " Can't find remote_agent " << remote_agent;
1254+ delete treq;
12491255 return NIXL_ERR_INVALID_PARAM;
12501256 }
12511257
12521258 rdma_qp = search->second ;
12531259
1254- if (lcnt != rcnt) return NIXL_ERR_INVALID_PARAM;
1260+ if (lcnt != rcnt) {
1261+ delete treq;
1262+ return NIXL_ERR_INVALID_PARAM;
1263+ }
12551264
1256- if (lcnt == 0 ) return NIXL_ERR_INVALID_PARAM;
1265+ if (lcnt == 0 ) {
1266+ delete treq;
1267+ return NIXL_ERR_INVALID_PARAM;
1268+ }
12571269
12581270 if (opt_args->customParam .empty ()) {
12591271 stream_id = (xferStream.fetch_add (1 ) & (nstreams - 1 ));
@@ -1302,6 +1314,7 @@ nixlDocaEngine::prepXfer (const nixl_xfer_op_t &operation,
13021314 auto search = notifMap.find (remote_agent);
13031315 if (search == notifMap.end ()) {
13041316 // NIXL_ERROR << "Can't find notif for remote_agent " << remote_agent;
1317+ delete treq;
13051318 return NIXL_ERR_INVALID_PARAM;
13061319 }
13071320
0 commit comments