diff options
Diffstat (limited to 'indra/llplugin')
| -rw-r--r-- | indra/llplugin/llpluginprocessparent.cpp | 47 | ||||
| -rw-r--r-- | indra/llplugin/llpluginprocessparent.h | 10 | 
2 files changed, 30 insertions, 27 deletions
| diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 110fac0f23..9b225cabb8 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -31,6 +31,7 @@  #include "llpluginprocessparent.h"  #include "llpluginmessagepipe.h"  #include "llpluginmessageclasses.h" +#include "stringize.h"  #include "llapr.h" @@ -134,7 +135,10 @@ LLPluginProcessParent::~LLPluginProcessParent()  		mSharedMemoryRegions.erase(iter);  	} -	mProcess.kill(); +	if (mProcess) +	{ +		mProcess->kill(); +	}  	killSockets();  } @@ -159,8 +163,8 @@ void LLPluginProcessParent::errorState(void)  void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug)  {	 -	mProcess.setExecutable(launcher_filename); -	mProcess.setWorkingDirectory(plugin_dir); +	mProcessParams["executable"] = launcher_filename; +	mProcessParams["cwd"] = plugin_dir;  	mPluginFile = plugin_filename;  	mPluginDir = plugin_dir;  	mCPUUsage = 0.0f; @@ -371,10 +375,8 @@ void LLPluginProcessParent::idle(void)  				// Launch the plugin process.  				// Only argument to the launcher is the port number we're listening on -				std::stringstream stream; -				stream << mBoundPort; -				mProcess.addArgument(stream.str()); -				if(mProcess.launch() != 0) +				mProcessParams["args"].append(stringize(mBoundPort)); +				if (! (mProcess = LLProcess::create(mProcessParams)))  				{  					errorState();  				} @@ -388,19 +390,18 @@ void LLPluginProcessParent::idle(void)  						// The command we're constructing would look like this on the command line:  						// osascript -e 'tell application "Terminal"' -e 'set win to do script "gdb -pid 12345"' -e 'do script "continue" in win' -e 'end tell' -						std::stringstream cmd; -						 -						mDebugger.setExecutable("/usr/bin/osascript"); -						mDebugger.addArgument("-e"); -						mDebugger.addArgument("tell application \"Terminal\""); -						mDebugger.addArgument("-e"); -						cmd << "set win to do script \"gdb -pid " << mProcess.getProcessID() << "\""; -						mDebugger.addArgument(cmd.str()); -						mDebugger.addArgument("-e"); -						mDebugger.addArgument("do script \"continue\" in win"); -						mDebugger.addArgument("-e"); -						mDebugger.addArgument("end tell"); -						mDebugger.launch(); +						LLSD params; +						params["executable"] = "/usr/bin/osascript"; +						params["args"].append("-e"); +						params["args"].append("tell application \"Terminal\""); +						params["args"].append("-e"); +						params["args"].append(STRINGIZE("set win to do script \"gdb -pid " +														<< mProcess->getProcessID() << "\"")); +						params["args"].append("-e"); +						params["args"].append("do script \"continue\" in win"); +						params["args"].append("-e"); +						params["args"].append("end tell"); +						mDebugger = LLProcess::create(params);  						#endif  					} @@ -470,7 +471,7 @@ void LLPluginProcessParent::idle(void)  			break;  			case STATE_EXITING: -				if(!mProcess.isRunning()) +				if (! mProcess->isRunning())  				{  					setState(STATE_CLEANUP);  				} @@ -498,7 +499,7 @@ void LLPluginProcessParent::idle(void)  			break;  			case STATE_CLEANUP: -				mProcess.kill(); +				mProcess->kill();  				killSockets();  				setState(STATE_DONE);  			break; @@ -1077,7 +1078,7 @@ bool LLPluginProcessParent::pluginLockedUpOrQuit()  {  	bool result = false; -	if(!mProcess.isRunning()) +	if (! mProcess->isRunning())  	{  		LL_WARNS("Plugin") << "child exited" << LL_ENDL;  		result = true; diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h index c66723f175..e8bcba75e0 100644 --- a/indra/llplugin/llpluginprocessparent.h +++ b/indra/llplugin/llpluginprocessparent.h @@ -30,13 +30,14 @@  #define LL_LLPLUGINPROCESSPARENT_H  #include "llapr.h" -#include "llprocesslauncher.h" +#include "llprocess.h"  #include "llpluginmessage.h"  #include "llpluginmessagepipe.h"  #include "llpluginsharedmemory.h"  #include "lliosocket.h"  #include "llthread.h" +#include "llsd.h"  class LLPluginProcessParentOwner  { @@ -148,8 +149,9 @@ private:  	LLSocket::ptr_t mListenSocket;  	LLSocket::ptr_t mSocket;  	U32 mBoundPort; -	 -	LLProcessLauncher mProcess; + +	LLSD mProcessParams; +	LLProcessPtr mProcess;  	std::string mPluginFile;  	std::string mPluginDir; @@ -171,7 +173,7 @@ private:  	bool mBlocked;  	bool mPolledInput; -	LLProcessLauncher mDebugger; +	LLProcessPtr mDebugger;  	F32 mPluginLaunchTimeout;		// Somewhat longer timeout for initial launch.  	F32 mPluginLockupTimeout;		// If we don't receive a heartbeat in this many seconds, we declare the plugin locked up. | 
