Przeglądaj źródła

Z991239-1610 #comment guardian修改线程退出 other:guardian修改线程退出

杨诗友80174847 4 lat temu
rodzic
commit
7c15e40605

+ 1 - 0
CMakeLists.txt

@@ -413,6 +413,7 @@ endif(SIMULATE_ON)#end simulate
 add_subdirectory(ThirdParty)
 add_subdirectory(Other)
 add_subdirectory(Module)
+add_subdirectory(Tool)
 if(BUILD_DEVADAPTER)
 	add_subdirectory(DevAdapter)
 endif(BUILD_DEVADAPTER)

+ 20 - 18
Tool/GuardianBase/GuardianBase.cpp

@@ -1,7 +1,6 @@
 // GuardianBase.cpp : Defines the exported functions for the DLL application.
 //
 
-#include "stdafx.h"
 #include "GuardianBase.h"
 
 #ifdef linux
@@ -18,6 +17,7 @@
 #define BUFFER_SIZE 1024
 #define FILE_NAME_MAX_SIZE 512
 #else
+#include "stdafx.h"
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <winsock2.h>
@@ -164,7 +164,7 @@ int GetSocket()
 	return ConnectSocket;	
 #endif //linux
 }
-ErrorCodeEnum SendData(GuardianInfo& info,int &sendSocket)
+int SendData(GuardianInfo& info,int &sendSocket)
 {
 #ifdef linux
 
@@ -175,7 +175,7 @@ ErrorCodeEnum SendData(GuardianInfo& info,int &sendSocket)
 
 	if (ConnectSocket == -1) {
 		printf("Unable to connect to server!\n");
-		return Error_IO;
+		return -1;
 }
 	sendSocket = ConnectSocket;
 	char sendbuf[DATA_BUFSIZE];
@@ -183,6 +183,7 @@ ErrorCodeEnum SendData(GuardianInfo& info,int &sendSocket)
 	memcpy(sendbuf, &info, sizeof(GuardianInfo));
 	send(sendSocket, sendbuf, sizeof(GuardianInfo), 0);//oiltmp size need to re calc
 	syslog(LOG_ERR,"after send");
+	return 0;
 #else
 	SOCKET ConnectSocket = INVALID_SOCKET;
 	ConnectSocket = GetSocket();
@@ -190,7 +191,7 @@ ErrorCodeEnum SendData(GuardianInfo& info,int &sendSocket)
 	if (ConnectSocket == INVALID_SOCKET) {
 		printf("Unable to connect to server!\n");
 		WSACleanup();
-		return Error_IO;
+		return -1;
 	}
 	sendSocket = ConnectSocket;
 	char sendbuf[DATA_BUFSIZE];
@@ -206,7 +207,7 @@ ErrorCodeEnum SendData(GuardianInfo& info,int &sendSocket)
 		printf("send failed with error: %d\n", WSAGetLastError());
 		closesocket(ConnectSocket);
 		WSACleanup();
-		return Error_IO;
+		return -1;
 	}
 
 	printf("Bytes Sent: %ld\n", iResult);
@@ -217,8 +218,9 @@ ErrorCodeEnum SendData(GuardianInfo& info,int &sendSocket)
 		printf("shutdown failed with error: %d\n", WSAGetLastError());
 		closesocket(ConnectSocket);
 		WSACleanup();
-		return Error_IO;
+		return -1;
 	}
+	return 0;
 #endif //linux
 }
 void ReceiveDataOfOneWay(int socket)
@@ -269,14 +271,14 @@ void ReceiveDataOfOneWay(int socket)
 	WSACleanup();
 #endif //linux
 }
-ErrorCodeEnum ShakeHands(WorkStateEnum &eState)
+int ShakeHands(WorkStateEnum &eState)
 {
 	GuardianInfo* pGdInfo = new GuardianInfo;
 	memset(pGdInfo, 0, sizeof(GuardianInfo));
 	pGdInfo->eType = GdOpShakeHand;
 	int socket = -1;
-	ErrorCodeEnum eErr = SendData(*pGdInfo, socket);
-	if (eErr != Error_Succeed)
+	int eErr = SendData(*pGdInfo, socket);
+	if (eErr != 0)
 		return eErr;
 	char recvbuf[DATA_BUFSIZE];
 	int recvbuflen = DATA_BUFSIZE;
@@ -321,17 +323,17 @@ ErrorCodeEnum ShakeHands(WorkStateEnum &eState)
     WSACleanup();
 #endif
 
-	return Error_Succeed;
+	return 0;
 }
-ErrorCodeEnum PushUpdateTask(const char *pszPackName)
+int PushUpdateTask(const char *pszPackName)
 {
-	return Error_NotImpl;
+	return 0;
 }
 bool IsInstalling()
 {
 	return false;
 }
-ErrorCodeEnum UpgradeRestart(const DWORD dwParam1,const DWORD dwParam2)
+int UpgradeRestart(const DWORD dwParam1,const DWORD dwParam2)
 {
 #ifdef linux	
 	openlog("gdbase",LOG_CONS|LOG_PID,LOG_LOCAL0);
@@ -343,14 +345,14 @@ ErrorCodeEnum UpgradeRestart(const DWORD dwParam1,const DWORD dwParam2)
 	pGdInfo->dwParam1 = dwParam1;
 	pGdInfo->dwParam2 = dwParam2;
 	int socket = -1;
-	ErrorCodeEnum eErr = SendData(*pGdInfo, socket);
-	if (eErr == Error_Succeed)
+	int eErr = SendData(*pGdInfo, socket);
+	if (eErr == 0)
 		ReceiveDataOfOneWay(socket);
 	if (pGdInfo != NULL)
 		delete pGdInfo;
 	return eErr;
 }
-ErrorCodeEnum FrameworkQuit(int eReason)
+int FrameworkQuit(int eReason)
 {
 #ifdef linux
 	openlog("gdbase",LOG_CONS|LOG_PID,LOG_LOCAL0);
@@ -360,8 +362,8 @@ ErrorCodeEnum FrameworkQuit(int eReason)
 	memset(pGdInfo, 0, sizeof(GuardianInfo));
 	pGdInfo->eType = GdOpFrameQuit;
 	int socket = -1;
-	ErrorCodeEnum eErr = SendData(*pGdInfo, socket);
-	if (eErr == Error_Succeed)
+	int eErr = SendData(*pGdInfo, socket);
+	if (eErr == 0)
 		ReceiveDataOfOneWay(socket);
 	if (pGdInfo != NULL)
 		delete pGdInfo;

+ 5 - 5
Tool/GuardianBase/GuardianBase.h

@@ -3,7 +3,7 @@
 #pragma once
 
 //#include "SpBase.h"
-#include "ErrorCode.h"
+//#include "ErrorCode.h"
 #ifdef linux
 typedef unsigned long DWORD;
 typedef char CHAR;
@@ -59,11 +59,11 @@ extern "C" {
 #   define GUARDIANBASE_API
 #endif
 
-GUARDIANBASE_API ErrorCodeEnum ShakeHands(WorkStateEnum &eState);
-GUARDIANBASE_API ErrorCodeEnum PushUpdateTask(const char *pszPackName);
+GUARDIANBASE_API int ShakeHands(WorkStateEnum &eState);
+GUARDIANBASE_API int PushUpdateTask(const char *pszPackName);
 GUARDIANBASE_API bool IsInstalling();
-GUARDIANBASE_API ErrorCodeEnum UpgradeRestart(const DWORD dwParam1,const DWORD dwParam2);
-GUARDIANBASE_API ErrorCodeEnum FrameworkQuit(int eReason);
+GUARDIANBASE_API int UpgradeRestart(const DWORD dwParam1,const DWORD dwParam2);
+GUARDIANBASE_API int FrameworkQuit(int eReason);
 
 
 #ifdef __cplusplus

+ 10 - 3
Tool/guardian/CMakeLists.txt

@@ -1,8 +1,15 @@
 cmake_minimum_required (VERSION 3.8)
-
+set(MODULE_NAME "guardian")
 project(guardian)
 
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
-include_directories(../GuardianBase ${RVC_COMMON_INCLUDE_DIR})
-add_executable(guardian guardian.cpp guardian.h)
+
+include_directories(${Tool_BASE_DIR}/GuardianBase)
+add_executable(guardian guardian.cpp)
+
+install(TARGETS ${MODULE_NAME} 
+    RUNTIME DESTINATION "${RVC_RUNTIME_PATH}"
+    ARCHIVE DESTINATION "${RVC_LIBRARY_PATH}"
+    LIBRARY DESTINATION "${RVC_LIBRARY_PATH}"
+	COMPONENT libraries)

+ 31 - 15
Tool/guardian/guardian.cpp

@@ -86,8 +86,11 @@ int g_startDay = 0;
 //HANDLE g_logHandle;
 char g_allMsg[1024];
 #ifdef linux
-void* DoWorkLinux(void* arg);
-void* DoNetControlLinux(void* arg);
+extern "C"
+{
+	void* DoWorkLinux(void* arg);
+	void* DoNetControlLinux(void* arg);
+}
 #define	FUNCTION_STDCALL
 typedef unsigned short      WORD;
 typedef struct _SYSTEMTIME {
@@ -155,7 +158,7 @@ int BeginThreadRVC(void* (*pFuncLinux)(void*), unsigned int(FUNCTION_STDCALL* pF
 		//printf("create error!\n");
 		return 1;
 	}
-	cout << "return of linux thread" << endl;
+	cout << "after pthread_create of linux thread" << endl;
 	return 0;
 #else
 	_beginthreadex(NULL, 0, pFuncWin, NULL, 0, NULL);
@@ -176,7 +179,7 @@ void StartDoNetControlRVC()
 {
 #ifdef linux
 	BeginThreadRVC(DoNetControlLinux, NULL);
-	cout << "quit StartDoNetRVC linux begin" << endl;
+	cout << "after DoNetControlLinux thread created." << endl;
 #else
 	BeginThreadRVC(NULL, DoNetControl);
 #endif //linux
@@ -193,10 +196,12 @@ void StartDoWorkRVC()
 void ServerReportEvent(const char* szFunction,const char* szName="guardian") 
 { 
 #ifdef linux
+	return;//oiltest
 	cout << "oiltest(SPE):" << szFunction << endl;
 	openlog("guardian", LOG_CONS | LOG_PID, LOG_LOCAL0);
 	syslog(LOG_ERR, szFunction);
 	closelog();
+
 #else
 	//LogToFile(false,false,false,szFunction);
 	HANDLE hEventSource;
@@ -315,12 +320,20 @@ bool VersionRollback()
 }
 int FrameworkShutdown(bool bUpgrade=false,bool bRestart = true)
 {
+	cout << "in FrameworkShutdown,bUpgrade:" << bUpgrade << ",bRestart:" << bRestart <<  endl;
 	if (!bUpgrade)
 		g_dwTimeBegin = GetTickCountRVC();
 	NetControl();
 #ifdef linux
 	//todo oiltestlinux
+	LogSingleMsg("to kill spshell");
 	ServerReportEvent("FrameworkShutdown linux");
+	system("killall -9 spshell");
+	system("killall -9 sphost");
+	sleep(2);
+	system("/opt/run/version/spexplorer.sh");
+	LogSingleMsg("after kill spshell");
+	return 0;
 #else
 	STARTUPINFO si;
 	PROCESS_INFORMATION pi;
@@ -380,7 +393,7 @@ bool ReadRuninfoContent(string &strData)
 	runinfo.open(strGdRuninfoPath,std::fstream::in|std::fstream::out|std::fstream::binary);
 	if (!runinfo.is_open())
 	{
-		LogToFile(false, false,false, "open gdruninfo(read) failed.");
+		LogToFile(true, true,false, "open gdruninfo(read) failed.",strerror(errno), errno);
 		return false;
 	}
 	runinfo.seekg(0,ios::end);
@@ -439,9 +452,10 @@ bool IsStartTimeFileExist()
 #ifdef linux
 void CheckDoWork(int sig)
 {
+	cout << "CheckDoWork" << endl;
 	if (SIGALRM == sig)
 	{
-		LogSingleMsg("to check value");
+		LogSingleMsg("to check value(linux)");
 		EnterCriticalSectionRVC(g_cs);
 
 		if (!g_bFrameQuit)
@@ -455,7 +469,8 @@ void CheckDoWork(int sig)
 			if ((g_bInUpgrade && ((dwTimeEnd - dwUpgradeTmpBegin) < MAX_WAIT_TIME_TO_RESTART))
 				&& (!g_bAuthSuc && ((dwTimeEnd - dwTmpBegin) > MAX_WAIT_TIME_TO_RESTART_UPGRADE)))
 			{
-				LogSingleMsg("**in upgrade restart**,to restart framework.");
+				LogSingleMsg("**in upgrade restart**,to restart framework(linux).");
+				cout << "oiltest 0127" << endl;
 				FrameworkShutdown(true, true);
 			}
 			if ((dwTimeEnd - dwTmpBegin) > MAX_WAIT_TIME_TO_RESTART)
@@ -497,15 +512,18 @@ void CheckDoWork(int sig)
 }
 void* DoWorkLinux(void* arg)
 {
-	LogSingleMsg("to wait.");
+	//LogSingleMsg("to wait."); 
+	cout << "DoWorkLinux" << endl;
 	signal(SIGALRM, CheckDoWork); //relate the signal and function
 	alarm(2 * 60);    //trigger the timer
-	//EndThreadRVC();
+	EndThreadRVC();
 	//return 0;
 }
 void* DoNetControlLinux(void* arg)
 {
-
+	cout << "to end DoNetControlLinux" << endl;
+	EndThreadRVC();
+	cout << "after end DoNetControlLinux" << endl;
 }
 void DataProcessLinux(int socket,const char*data)
 {
@@ -610,8 +628,6 @@ void DataProcessLinux(int socket,const char*data)
 			g_bInUpgrade = true;
 			WriteRunInfoContent("111");
 			g_dwUpgradeRestartTimeBegin = GetTickCountRVC();
-			//Sleep(5000);
-			//FrameworkShutdown();
 		}
 		else if (pInfo->dwParam1 == 2)//need rollback after upgrade
 		{
@@ -753,8 +769,6 @@ void DataProcess(LPPER_HANDLE_DATA pPerHandleData,LPPER_IO_OPERATION_DATA pPerIo
 				g_bInUpgrade = true;
 				WriteRunInfoContent("111");
 				g_dwUpgradeRestartTimeBegin = GetTickCountRVC();
-				//Sleep(5000);
-				//FrameworkShutdown();
 			}
 			else if (pInfo->dwParam1 == 2)//need rollback after upgrade
 			{
@@ -988,6 +1002,7 @@ unsigned int InitListenSocketRVC()
 	serveraddr.sin_port = htons(default_port);
 	bind(g_sListen, (sockaddr*)& serveraddr, sizeof(serveraddr));
 	listen(g_sListen, LISTENQ);
+	cout << "listen on:" << g_sListen << endl;
 	return g_sListen;
 #else
 	WSADATA wsaData;
@@ -1063,10 +1078,11 @@ void AcceptReqRVC()
 {
 #ifdef linux
 	StartDoWorkRVC();
+	cout << "AcceptReqRVC:after StartDoWorkRVC" << endl;
 	int maxi, connfd, sockfd, nfds;
 	struct epoll_event events[20];
 	struct sockaddr_in clientaddr;
-	socklen_t clilen;
+	socklen_t clilen = sizeof(struct sockaddr);
 	ssize_t n;
 	maxi = 0;
 	char line[MAXLINE];

+ 3 - 1
addin/cmake/ModMakeSettings.cmake

@@ -4,4 +4,6 @@ set(MODULE_BASE_DIR "${PROJECT_SOURCE_DIR}/Module")
 
 SET(ModuleCommonHeadPath "${MODULE_BASE_DIR}/include")
 
-set(OTHER_LIB_BASE_DIR "${PROJECT_SOURCE_DIR}/Other")
+set(OTHER_LIB_BASE_DIR "${PROJECT_SOURCE_DIR}/Other")
+
+set(Tool_BASE_DIR "${PROJECT_SOURCE_DIR}/Tool")