@@ -989,9 +989,13 @@ int ThreadMetrics::Update(Cb&& cb, Data&&... data) {
989989 }
990990
991991 // _1 - ThreadMetrics*
992- UserData* user_data = new UserData (
992+ UserData* user_data = new (std::nothrow) UserData (
993993 std::bind (std::forward<Cb>(cb), _1, std::forward<Data>(data)...));
994994
995+ if (user_data == nullptr ) {
996+ return UV_ENOMEM;
997+ }
998+
995999 user_data_ = user_data;
9961000 proxy_ = thread_metrics_proxy_<UserData>;
9971001 stor_.thread_id = thread_id_;
@@ -1032,8 +1036,13 @@ MetricsStream* MetricsStream::CreateInstance(uint32_t flags,
10321036 std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
10331037 // _1 - MetricsStream* metrics_stream
10341038 // _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+
10371046 stream->DoSetup (flags,
10381047 metrics_stream_proxy_<UserData>,
10391048 internal::delete_proxy_<UserData>,
@@ -1062,8 +1071,13 @@ Tracer* Tracer::CreateInstance(uint32_t flags, Cb&& cb, Data&&... data) {
10621071 std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
10631072 // _1 - Tracer*
10641073 // _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+
10671081 tracer->DoSetup (flags,
10681082 trace_proxy_<UserData>,
10691083 internal::delete_proxy_<UserData>,
@@ -1092,16 +1106,22 @@ int CpuProfiler::TakeProfile(SharedEnvInst envinst,
10921106
10931107 // _1 - int status
10941108 // _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+ }
10971115
10981116 int er = get_cpu_profile_ (envinst,
10991117 duration,
1100- user_data. get () ,
1118+ user_data,
11011119 cpu_profiler_proxy_<UserData>,
11021120 internal::delete_proxy_<UserData>);
1103- if (!er)
1104- user_data.release ();
1121+ if (er) {
1122+ delete user_data;
1123+ }
1124+
11051125 return er;
11061126}
11071127
@@ -1126,16 +1146,23 @@ int Snapshot::TakeSnapshot(SharedEnvInst envinst,
11261146
11271147 // _1 - int status
11281148 // _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+ }
11311155
11321156 int er = get_snapshot_ (envinst,
11331157 redacted,
1134- user_data. get () ,
1158+ user_data,
11351159 snapshot_proxy_<UserData>,
11361160 internal::delete_proxy_<UserData>);
1137- if (!er)
1138- user_data.release ();
1161+
1162+ if (er) {
1163+ delete user_data;
1164+ }
1165+
11391166 return er;
11401167}
11411168
@@ -1151,14 +1178,20 @@ int QueueCallback(Cb&& cb, Data&&... data) {
11511178 using UserData = decltype (std::bind (
11521179 std::forward<Cb>(cb), std::forward<Data>(data)...));
11531180
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+ }
11561194
1157- int er = internal::queue_callback_ (
1158- user_data.get (),
1159- internal::queue_callback_proxy_<UserData>);
1160- if (!er)
1161- user_data.release ();
11621195 return er;
11631196}
11641197
@@ -1168,15 +1201,20 @@ int QueueCallback(uint64_t timeout, Cb&& cb, Data&&... data) {
11681201 using UserData = decltype (std::bind (
11691202 std::forward<Cb>(cb), std::forward<Data>(data)...));
11701203
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+ }
11731210
11741211 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+
11801218 return er;
11811219}
11821220
@@ -1191,17 +1229,20 @@ int RunCommand(SharedEnvInst envinst,
11911229 using UserData = decltype (std::bind (
11921230 std::forward<Cb>(cb), _1, std::forward<Data>(data)...));
11931231 // _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+ }
11961238
11971239 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+ }
12021245
1203- if (!er)
1204- user_data.release ();
12051246 return 0 ;
12061247}
12071248
@@ -1223,17 +1264,24 @@ int CustomCommand(SharedEnvInst envinst,
12231264 // _3 - int status
12241265 // _4 - std::pair<bool, std::string> error
12251266 // _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+
12371285 return er;
12381286}
12391287
@@ -1247,15 +1295,21 @@ int AtExitHook(Cb&& cb, Data&&... data) {
12471295
12481296 // _1 - bool on_signal
12491297 // _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+ }
12521312
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 ();
12591313 return er;
12601314}
12611315
@@ -1271,6 +1325,7 @@ int OnBlockedLoopHook(uint64_t threshold, Cb&& cb, Data&&... data) {
12711325 // _2 - std::string info
12721326 UserData* user_data = new (std::nothrow) UserData (std::bind (
12731327 std::forward<Cb>(cb), _1, _2, std::forward<Data>(data)...));
1328+
12741329 if (user_data == nullptr ) {
12751330 return UV_ENOMEM;
12761331 }
0 commit comments