@@ -18,8 +18,10 @@ const char* GET_FLAG(G_ScaFlag x) { return (x >= NONE && x < MAX_VAL) ? G_FlagVa
18
18
19
19
void signalCatch (int value)
20
20
{
21
- if (value == SIGSEGV)
22
- return ;
21
+ if (value == SIGSEGV) {
22
+ LOGE (" Segmentation fault caught!" );
23
+ exit (EXIT_FAILURE); // exit
24
+ }
23
25
LOGI (" caught signal: %d" , value);
24
26
}
25
27
@@ -53,7 +55,7 @@ ssize_t Scadup::writes(SOCKET socket, const uint8_t* data, size_t len)
53
55
return 0 ;
54
56
if (errno == EPIPE)
55
57
return -1 ;
56
- std::mutex mtxLck = {};
58
+ static std::mutex mtxLck; // static lock
57
59
std::lock_guard<std::mutex> lock (mtxLck);
58
60
auto left = (ssize_t )len;
59
61
auto * buff = new (std::nothrow) uint8_t [left];
@@ -269,8 +271,13 @@ int Broker::ProxyTask(Networks& works, const Network& work)
269
271
const size_t sz1 = sizeof (Message::Payload::status);
270
272
size_t left = work.head .size - HEAD_SIZE;
271
273
static Message mval{};
272
- auto * msg = new (mval) Message;
273
- msg->payload .content = new char [left - sz1];
274
+ auto * msg = new (mval) Message; // placement new
275
+ msg->payload .content = new (std::nothrow) char [left - sz1];
276
+ if (msg->payload .content == nullptr ) {
277
+ LOGE (" Payload content allocation failed!" );
278
+ delete msg;
279
+ return -1 ;
280
+ }
274
281
memset (msg->payload .content , 0 , left - sz1);
275
282
size_t len = 0 ;
276
283
size_t size = sz1;
@@ -378,19 +385,17 @@ void Broker::checkAlive(Networks& works, bool* active)
378
385
std::vector<Network>& vec = work.second ;
379
386
for (auto it = vec.begin (); it != vec.end (); ) {
380
387
if (!it->active ) {
381
- it = vec.erase (it);
382
388
LOGI (" delete offline client %s:%u" , it->IP , it->PORT );
389
+ it = vec.erase (it);
383
390
} else {
384
391
++it;
385
392
}
386
393
}
387
394
}
388
395
for (auto it = works.begin (); it != works.end (); ) {
389
396
if (it->second .empty ()) {
390
- auto next = std::next (it);
391
- works.erase (it);
392
- it = next;
393
397
LOGI (" works key(%s) is null deleted! now size=%d" , GET_FLAG (it->first ), works.size ());
398
+ it = works.erase (it);
394
399
} else {
395
400
++it;
396
401
}
0 commit comments