Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/engine/main.cpp

Issue 10809053: Terminate the engine if another instance is already running (Closed)
Patch Set: Created June 6, 2013, 1:43 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/shared/Communication.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include <AdblockPlus.h> 1 #include <AdblockPlus.h>
2 #include <vector> 2 #include <vector>
3 #include <Windows.h> 3 #include <Windows.h>
4 4
5 #include "../shared/AutoHandle.h" 5 #include "../shared/AutoHandle.h"
6 #include "../shared/Communication.h" 6 #include "../shared/Communication.h"
7 #include "../shared/Utils.h" 7 #include "../shared/Utils.h"
8 #include "../shared/Version.h" 8 #include "../shared/Version.h"
9 #include "Debug.h" 9 #include "Debug.h"
10 10
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 180
181 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); 181 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo);
182 std::string dataPath = ToUtf8String(GetAppDataPath()); 182 std::string dataPath = ToUtf8String(GetAppDataPath());
183 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath); 183 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get()) ->SetBasePath(dataPath);
184 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine)); 184 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE ngine(jsEngine));
185 return filterEngine; 185 return filterEngine;
186 } 186 }
187 187
188 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 188 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
189 { 189 {
190 // TODO: Attempt to create the pipe first, and exit immediately if this 190 if (Communication::PipeExists(Communication::pipeName))
191 // fails. Since multiple instances of the engine could be running, 191 {
192 // this may need named mutices to avoid race conditions. 192 DebugLastError("Named pipe exists, another engine instance appears to be run ning");
193 // Note that as soon as the pipe is created first, we can reduce the 193 return 1;
194 // client timeout after CreateProcess(), but should increase the one 194 }
Wladimir Palant 2013/06/07 06:16:08 That's causing a race condition. It can take sever
Felix Dahlke 2013/06/07 06:37:22 Hm, you're right, this actually shouldn't work. Ma
195 // in WaitNamedPipe().
196 195
197 int argc; 196 int argc;
198 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); 197 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
199 std::wstring locale(argc >= 1 ? argv[0] : L""); 198 std::wstring locale(argc >= 1 ? argv[0] : L"");
200 LocalFree(argv); 199 LocalFree(argv);
201 200
202 filterEngine = CreateFilterEngine(locale); 201 filterEngine = CreateFilterEngine(locale);
203 202
204 for (;;) 203 for (;;)
205 { 204 {
(...skipping 13 matching lines...) Expand all
219 } 218 }
220 catch (std::runtime_error e) 219 catch (std::runtime_error e)
221 { 220 {
222 DebugException(e); 221 DebugException(e);
223 return 1; 222 return 1;
224 } 223 }
225 } 224 }
226 225
227 return 0; 226 return 0;
228 } 227 }
OLDNEW
« no previous file with comments | « no previous file | src/shared/Communication.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld