@@ -989,9 +989,13 @@ int ThreadMetrics::Update(Cb&& cb, Data&&... data) {
989
989
}
990
990
991
991
// _1 - ThreadMetrics*
992
- UserData* user_data = new UserData (
992
+ UserData* user_data = new (std::nothrow) UserData (
993
993
std::bind (std::forward<Cb>(cb), _1, std::forward<Data>(data)...));
994
994
995
+ if (user_data == nullptr ) {
996
+ return UV_ENOMEM;
997
+ }
998
+
995
999
user_data_ = user_data;
996
1000
proxy_ = thread_metrics_proxy_<UserData>;
997
1001
stor_.thread_id = thread_id_;
@@ -1032,8 +1036,13 @@ MetricsStream* MetricsStream::CreateInstance(uint32_t flags,
1032
1036
std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1033
1037
// _1 - MetricsStream* metrics_stream
1034
1038
// _2 - const metrics_stream_bucket& bucket
1035
- UserData* user_data = new UserData (std::bind (
1036
- std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1039
+ UserData* user_data = new (std::nothrow) UserData (
1040
+ std::bind (std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1041
+
1042
+ if (user_data == nullptr ) {
1043
+ return nullptr ;
1044
+ }
1045
+
1037
1046
stream->DoSetup (flags,
1038
1047
metrics_stream_proxy_<UserData>,
1039
1048
internal::delete_proxy_<UserData>,
@@ -1062,8 +1071,13 @@ Tracer* Tracer::CreateInstance(uint32_t flags, Cb&& cb, Data&&... data) {
1062
1071
std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1063
1072
// _1 - Tracer*
1064
1073
// _2 - const SpanStor&
1065
- UserData* user_data = new UserData (std::bind (
1066
- std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1074
+ UserData* user_data = new (std::nothrow) UserData (
1075
+ std::bind (std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1076
+
1077
+ if (user_data == nullptr ) {
1078
+ return nullptr ;
1079
+ }
1080
+
1067
1081
tracer->DoSetup (flags,
1068
1082
trace_proxy_<UserData>,
1069
1083
internal::delete_proxy_<UserData>,
@@ -1092,16 +1106,22 @@ int CpuProfiler::TakeProfile(SharedEnvInst envinst,
1092
1106
1093
1107
// _1 - int status
1094
1108
// _2 - std::string json
1095
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1096
- std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1109
+ UserData* user_data = new (std::nothrow) UserData (
1110
+ std::bind (std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1111
+
1112
+ if (user_data == nullptr ) {
1113
+ return UV_ENOMEM;
1114
+ }
1097
1115
1098
1116
int er = get_cpu_profile_ (envinst,
1099
1117
duration,
1100
- user_data. get () ,
1118
+ user_data,
1101
1119
cpu_profiler_proxy_<UserData>,
1102
1120
internal::delete_proxy_<UserData>);
1103
- if (!er)
1104
- user_data.release ();
1121
+ if (er) {
1122
+ delete user_data;
1123
+ }
1124
+
1105
1125
return er;
1106
1126
}
1107
1127
@@ -1126,16 +1146,23 @@ int Snapshot::TakeSnapshot(SharedEnvInst envinst,
1126
1146
1127
1147
// _1 - int status
1128
1148
// _2 - std::string json
1129
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1130
- std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1149
+ UserData* user_data = new (std::nothrow) UserData (
1150
+ std::bind (std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1151
+
1152
+ if (user_data == nullptr ) {
1153
+ return UV_ENOMEM;
1154
+ }
1131
1155
1132
1156
int er = get_snapshot_ (envinst,
1133
1157
redacted,
1134
- user_data. get () ,
1158
+ user_data,
1135
1159
snapshot_proxy_<UserData>,
1136
1160
internal::delete_proxy_<UserData>);
1137
- if (!er)
1138
- user_data.release ();
1161
+
1162
+ if (er) {
1163
+ delete user_data;
1164
+ }
1165
+
1139
1166
return er;
1140
1167
}
1141
1168
@@ -1151,14 +1178,20 @@ int QueueCallback(Cb&& cb, Data&&... data) {
1151
1178
using UserData = decltype (std::bind (
1152
1179
std::forward<Cb>(cb), std::forward<Data>(data)...));
1153
1180
1154
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1155
- std::forward<Cb>(cb), std::forward<Data>(data)...));
1181
+ UserData* user_data = new (std::nothrow)
1182
+ UserData (std::bind (std::forward<Cb>(cb), std::forward<Data>(data)...));
1183
+
1184
+ if (user_data == nullptr ) {
1185
+ return UV_ENOMEM;
1186
+ }
1187
+
1188
+ int er = internal::queue_callback_ (user_data,
1189
+ internal::queue_callback_proxy_<UserData>);
1190
+
1191
+ if (er) {
1192
+ delete user_data;
1193
+ }
1156
1194
1157
- int er = internal::queue_callback_ (
1158
- user_data.get (),
1159
- internal::queue_callback_proxy_<UserData>);
1160
- if (!er)
1161
- user_data.release ();
1162
1195
return er;
1163
1196
}
1164
1197
@@ -1168,15 +1201,20 @@ int QueueCallback(uint64_t timeout, Cb&& cb, Data&&... data) {
1168
1201
using UserData = decltype (std::bind (
1169
1202
std::forward<Cb>(cb), std::forward<Data>(data)...));
1170
1203
1171
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1172
- std::forward<Cb>(cb), std::forward<Data>(data)...));
1204
+ UserData* user_data = new (std::nothrow)
1205
+ UserData (std::bind (std::forward<Cb>(cb), std::forward<Data>(data)...));
1206
+
1207
+ if (user_data == nullptr ) {
1208
+ return UV_ENOMEM;
1209
+ }
1173
1210
1174
1211
int er = internal::queue_callback_ (
1175
- timeout,
1176
- user_data.get (),
1177
- internal::queue_callback_proxy_<UserData>);
1178
- if (!er)
1179
- user_data.release ();
1212
+ timeout, user_data, internal::queue_callback_proxy_<UserData>);
1213
+
1214
+ if (er) {
1215
+ delete user_data;
1216
+ }
1217
+
1180
1218
return er;
1181
1219
}
1182
1220
@@ -1191,17 +1229,20 @@ int RunCommand(SharedEnvInst envinst,
1191
1229
using UserData = decltype (std::bind (
1192
1230
std::forward<Cb>(cb), _1, std::forward<Data>(data)...));
1193
1231
// _1 - SharedEnvInst
1194
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1195
- std::forward<Cb>(cb), _1, std::forward<Data>(data)...));
1232
+ UserData* user_data = new (std::nothrow) UserData (
1233
+ std::bind (std::forward<Cb>(cb), _1, std::forward<Data>(data)...));
1234
+
1235
+ if (user_data == nullptr ) {
1236
+ return UV_ENOMEM;
1237
+ }
1196
1238
1197
1239
int er = internal::run_command_ (
1198
- envinst,
1199
- type,
1200
- user_data.get (),
1201
- internal::run_command_proxy_<UserData>);
1240
+ envinst, type, user_data, internal::run_command_proxy_<UserData>);
1241
+
1242
+ if (er) {
1243
+ delete user_data;
1244
+ }
1202
1245
1203
- if (!er)
1204
- user_data.release ();
1205
1246
return 0 ;
1206
1247
}
1207
1248
@@ -1223,17 +1264,24 @@ int CustomCommand(SharedEnvInst envinst,
1223
1264
// _3 - int status
1224
1265
// _4 - std::pair<bool, std::string> error
1225
1266
// _5 - std::pair<bool, std::string> value
1226
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1227
- std::forward<Cb>(cb), _1, _2, _3, _4, _5, std::forward<Data>(data)...));
1228
- int er = internal::custom_command_ (
1229
- envinst,
1230
- req_id,
1231
- command,
1232
- args,
1233
- user_data.get (),
1234
- internal::custom_command_proxy_<UserData>);
1235
- if (!er)
1236
- user_data.release ();
1267
+ UserData* user_data = new (std::nothrow) UserData (std::bind (
1268
+ std::forward<Cb>(cb), _1, _2, _3, _4, _5, std::forward<Data>(data)...));
1269
+
1270
+ if (user_data == nullptr ) {
1271
+ return UV_ENOMEM;
1272
+ }
1273
+
1274
+ int er = internal::custom_command_ (envinst,
1275
+ req_id,
1276
+ command,
1277
+ args,
1278
+ user_data,
1279
+ internal::custom_command_proxy_<UserData>);
1280
+
1281
+ if (er) {
1282
+ delete user_data;
1283
+ }
1284
+
1237
1285
return er;
1238
1286
}
1239
1287
@@ -1247,15 +1295,21 @@ int AtExitHook(Cb&& cb, Data&&... data) {
1247
1295
1248
1296
// _1 - bool on_signal
1249
1297
// _2 - bool profile_stopped
1250
- std::unique_ptr<UserData> user_data = std::make_unique<UserData>(std::bind (
1251
- std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1298
+ UserData* user_data = new (std::nothrow) UserData (
1299
+ std::bind (std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1300
+
1301
+ if (user_data == nullptr ) {
1302
+ return UV_ENOMEM;
1303
+ }
1304
+
1305
+ int er = internal::at_exit_hook_ (user_data,
1306
+ internal::at_exit_hook_proxy_<UserData>,
1307
+ internal::delete_proxy_<UserData>);
1308
+
1309
+ if (er) {
1310
+ delete user_data;
1311
+ }
1252
1312
1253
- int er = internal::at_exit_hook_ (
1254
- user_data.get (),
1255
- internal::at_exit_hook_proxy_<UserData>,
1256
- internal::delete_proxy_<UserData>);
1257
- if (!er)
1258
- user_data.release ();
1259
1313
return er;
1260
1314
}
1261
1315
@@ -1271,6 +1325,7 @@ int OnBlockedLoopHook(uint64_t threshold, Cb&& cb, Data&&... data) {
1271
1325
// _2 - std::string info
1272
1326
UserData* user_data = new (std::nothrow) UserData (std::bind (
1273
1327
std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1328
+
1274
1329
if (user_data == nullptr ) {
1275
1330
return UV_ENOMEM;
1276
1331
}
0 commit comments