@@ -61,8 +61,8 @@ BOOL XcpEthServerInit(const uint8_t* addr, uint16_t port, BOOL useTCP, uint16_t
6161 // Init network sockets
6262 if (!socketStartup ()) return FALSE;
6363
64- gXcpServer .TransmitThreadRunning = 0 ;
65- gXcpServer .ReceiveThreadRunning = 0 ;
64+ gXcpServer .TransmitThreadRunning = FALSE ;
65+ gXcpServer .ReceiveThreadRunning = FALSE ;
6666
6767 // Initialize XCP protocol layer if not already done
6868 XcpInit ();
@@ -84,6 +84,20 @@ BOOL XcpEthServerInit(const uint8_t* addr, uint16_t port, BOOL useTCP, uint16_t
8484
8585BOOL XcpEthServerShutdown () {
8686
87+ #if OPTION_SERVER_FORCEFULL_TERMINATION
88+ // Forcefull termination
89+ if (gXcpServer .isInit ) {
90+ DBG_PRINT3 ("Disconnect, cancel threads and shutdown XCP!\n" );
91+ XcpDisconnect ();
92+ cancel_thread (gXcpServer .ReceiveThreadHandle );
93+ cancel_thread (gXcpServer .TransmitThreadHandle );
94+ XcpTlShutdown ();
95+ gXcpServer .isInit = FALSE;
96+ socketCleanup ();
97+ XcpReset ();
98+ }
99+ #else
100+ // Gracefull termination
87101 if (gXcpServer .isInit ) {
88102 XcpDisconnect ();
89103 gXcpServer .ReceiveThreadRunning = FALSE;
@@ -93,11 +107,14 @@ BOOL XcpEthServerShutdown() {
93107 join_thread (gXcpServer .TransmitThreadHandle );
94108 gXcpServer .isInit = FALSE;
95109 socketCleanup ();
110+ XcpReset ();
96111 }
112+ #endif
97113 return TRUE;
98114}
99115
100116
117+
101118// XCP server unicast command receive thread
102119#if defined(_WIN ) // Windows
103120DWORD WINAPI XcpServerReceiveThread (LPVOID par )
0 commit comments