X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FServer.cpp;h=f545bb503820dba761ef97212686f58e8e8776b5;hb=4f341fc59dc755bbf5564567acd682ad9502410d;hp=b7fa35ee13fbeee11d1a8676a73f6f31fada827c;hpb=9c55af4a223ce4db29d643251109e245665344bd;p=lyx.git diff --git a/src/Server.cpp b/src/Server.cpp index b7fa35ee13..f545bb5038 100644 --- a/src/Server.cpp +++ b/src/Server.cpp @@ -55,8 +55,9 @@ #include "support/lassert.h" #include "support/lstrings.h" #include "support/os.h" +#include "support/signals.h" -#include "support/bind.h" +#include #ifdef _WIN32 #include @@ -116,7 +117,7 @@ string errormsg(DWORD const error) return message; } -} // namespace anon +} // namespace DWORD WINAPI pipeServerWrapper(void * arg) @@ -136,14 +137,14 @@ DWORD WINAPI pipeServerWrapper(void * arg) LyXComm::LyXComm(string const & pip, Server * cli, ClientCallbackfct ccb) - : pipename_(pip), client_(cli), clientcb_(ccb), stopserver_(0) + : stopserver_(0), + ready_(false), pipename_(pip), client_(cli), clientcb_(ccb), + deferred_loading_(false) { for (int i = 0; i < MAX_PIPES; ++i) { event_[i] = 0; pipe_[i].handle = INVALID_HANDLE_VALUE; } - ready_ = false; - deferred_loading_ = false; openConnection(); } @@ -209,7 +210,7 @@ bool LyXComm::pipeServer() // Determine which pipe instance completed the operation. i = wait - WAIT_OBJECT_0; - LASSERT(i >= 0 && i <= MAX_PIPES, /**/); + LASSERT(i <= MAX_PIPES, /**/); // Check whether we were waked up for stopping the pipe server. if (i == MAX_PIPES) @@ -729,10 +730,10 @@ void LyXComm::send(string const & msg) #else // defined (HAVE_MKFIFO) LyXComm::LyXComm(string const & pip, Server * cli, ClientCallbackfct ccb) - : pipename_(pip), client_(cli), clientcb_(ccb) + : infd_(-1), outfd_(-1), + ready_(false), pipename_(pip), client_(cli), clientcb_(ccb), + deferred_loading_(false) { - ready_ = false; - deferred_loading_ = false; openConnection(); } @@ -857,8 +858,12 @@ int LyXComm::startPipe(string const & file, bool write) } if (!write) { - theApp()->registerSocketCallback(fd, - bind(&LyXComm::read_ready, this)); + // Make sure not to call read_ready after destruction. + weak_ptr tracker = tracker_.p(); + theApp()->registerSocketCallback(fd, [=](){ + if (!tracker.expired()) + read_ready(); + }); } return fd; @@ -992,7 +997,7 @@ struct Sleep : QThread } }; -} // namespace anon +} // namespace bool LyXComm::loadFilesInOtherInstance() @@ -1173,7 +1178,7 @@ void Server::callback(string const & msg) // connect to the lyxfunc in the single GuiView we // support currently. (Lgb) - FuncRequest fr(lyxaction.lookupFunc(cmd), arg); + FuncRequest fr(lyxaction.lookupFunc(cmd), from_ascii(arg)); fr.setOrigin(FuncRequest::LYXSERVER); DispatchResult dr; theApp()->dispatch(fr, dr);