Skip to content

Commit b75220e

Browse files
linux/daemon_cl: CLEANUP() macro added (SCA daemon_cl clean up fixes)
Static code analysis fixes _005/_007..._011/_014..._016/_047 Issues: Avnu#41 Avnu#42 Avnu#43 Avnu#44 Avnu#45 Avnu#46 Avnu#48 Avnu#49 Avnu#50 Avnu#71 Minor main() refactoring and macro for deleting all objects created during start up - limits memory leaks.
1 parent a9f9f50 commit b75220e

File tree

1 file changed

+36
-18
lines changed

1 file changed

+36
-18
lines changed

linux/src/daemon_cl.cpp

+36-18
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,24 @@
6666
#define PHY_DELAY_MB_TX_I20 1044//100M delay
6767
#define PHY_DELAY_MB_RX_I20 2133//100M delay
6868

69+
#define CLEANUP()\
70+
do { \
71+
delete pPort; \
72+
delete pClock; \
73+
delete ifname; \
74+
delete timestamper; \
75+
delete ipc; \
76+
delete condition_factory; \
77+
delete timer_factory; \
78+
delete lock_factory; \
79+
delete timerq_factory; \
80+
delete default_factory; \
81+
delete thread_factory; \
82+
delete watchdog; \
83+
GPTP_LOG_INFO("Clean up"); \
84+
GPTP_LOG_UNREGISTER(); \
85+
} while(0)
86+
6987
void gPTPPersistWriteCB(char *bufPtr, uint32_t bufSize);
7088

7189
void print_usage( char *arg0 ) {
@@ -108,7 +126,7 @@ int main(int argc, char **argv)
108126
PortInit_t portInit;
109127

110128
sigset_t set;
111-
InterfaceName *ifname;
129+
InterfaceName *ifname = NULL;
112130
int sig;
113131

114132
bool syntonize = false;
@@ -183,19 +201,26 @@ int main(int argc, char **argv)
183201
portInit.neighborPropDelayThreshold =
184202
CommonPort::NEIGHBOR_PROP_DELAY_THRESH;
185203

186-
LinuxNetworkInterfaceFactory *default_factory =
187-
new LinuxNetworkInterfaceFactory;
204+
LinuxNetworkInterfaceFactory *default_factory = new LinuxNetworkInterfaceFactory;
188205
OSNetworkInterfaceFactory::registerFactory
189206
(factory_name_t("default"), default_factory);
190207
LinuxTimerQueueFactory *timerq_factory = new LinuxTimerQueueFactory();
191208
LinuxLockFactory *lock_factory = new LinuxLockFactory();
192209
LinuxTimerFactory *timer_factory = new LinuxTimerFactory();
193210
LinuxConditionFactory *condition_factory = new LinuxConditionFactory();
194211
LinuxSharedMemoryIPC *ipc = new LinuxSharedMemoryIPC();
212+
213+
#ifdef ARCH_INTELCE
214+
EtherTimestamper *timestamper = new LinuxTimestamperIntelCE();
215+
#else
216+
EtherTimestamper *timestamper = new LinuxTimestamperGeneric();
217+
#endif
218+
195219
/* Create Low level network interface object */
196220
if( argc < 2 ) {
197-
printf( "Interface name required\n" );
221+
GPTP_LOG_ERROR( "Interface name required" );
198222
print_usage( argv[0] );
223+
CLEANUP();
199224
return -1;
200225
}
201226
ifname = new InterfaceName( argv[1], strlen(argv[1]) );
@@ -241,7 +266,7 @@ int main(int argc, char **argv)
241266
}
242267
else if( strcmp(argv[i] + 1, "H") == 0 ) {
243268
print_usage( argv[0] );
244-
GPTP_LOG_UNREGISTER();
269+
CLEANUP();
245270
return 0;
246271
}
247272
else if( strcmp(argv[i] + 1, "R") == 0 ) {
@@ -269,7 +294,7 @@ int main(int argc, char **argv)
269294
{
270295
printf("Too many values\n");
271296
print_usage( argv[0] );
272-
GPTP_LOG_UNREGISTER();
297+
CLEANUP();
273298
return 0;
274299
}
275300
phy_delay[delay_count]=atoi(cli_inp_delay);
@@ -280,7 +305,7 @@ int main(int argc, char **argv)
280305
{
281306
printf("All four delay values must be specified\n");
282307
print_usage( argv[0] );
283-
GPTP_LOG_UNREGISTER();
308+
CLEANUP();
284309
return 0;
285310
}
286311
ether_phy_delay[LINKSPEED_1G].set_delay
@@ -348,11 +373,6 @@ int main(int argc, char **argv)
348373
restoredataptr = (char *)restoredata;
349374
}
350375

351-
#ifdef ARCH_INTELCE
352-
EtherTimestamper *timestamper = new LinuxTimestamperIntelCE();
353-
#else
354-
EtherTimestamper *timestamper = new LinuxTimestamperGeneric();
355-
#endif
356376

357377
sigemptyset(&set);
358378
sigaddset(&set, SIGINT);
@@ -361,7 +381,7 @@ int main(int argc, char **argv)
361381
sigaddset(&set, SIGUSR2);
362382
if (pthread_sigmask(SIG_BLOCK, &set, NULL) != 0) {
363383
perror("pthread_sigmask()");
364-
GPTP_LOG_UNREGISTER();
384+
CLEANUP();
365385
return -1;
366386
}
367387

@@ -431,7 +451,7 @@ int main(int argc, char **argv)
431451

432452
if (!pPort->init_port()) {
433453
GPTP_LOG_ERROR("failed to initialize port");
434-
GPTP_LOG_UNREGISTER();
454+
CLEANUP();
435455
return -1;
436456
}
437457

@@ -484,7 +504,7 @@ int main(int argc, char **argv)
484504

485505
if (sigwait(&set, &sig) != 0) {
486506
perror("sigwait()");
487-
GPTP_LOG_UNREGISTER();
507+
CLEANUP();
488508
return -1;
489509
}
490510

@@ -522,9 +542,7 @@ int main(int argc, char **argv)
522542
pPort->joinLinkWatchThread(linkExitCode);
523543
GPTP_LOG_INFO("All threads terminated");
524544

525-
if( ipc ) delete ipc;
526-
527-
GPTP_LOG_UNREGISTER();
545+
CLEANUP();
528546
return 0;
529547
}
530548

0 commit comments

Comments
 (0)