diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2012-02-12 21:59:51 -0500 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2012-02-12 21:59:51 -0500 | 
| commit | 6da3f0907cea3748adb6be9a7c393835109adf3b (patch) | |
| tree | 8a569f192a49913db7365c97548c1227a123127e /indra/llplugin | |
| parent | 8804fa524c084edb9f49f4122e2c7330a80c79b5 (diff) | |
| parent | 90a1b67cc43792e1ca0047eaca51530aa14e134c (diff) | |
Automated merge with ssh://hg.lindenlab.com/nat/viewer-new-apr
Diffstat (limited to 'indra/llplugin')
| -rw-r--r-- | indra/llplugin/llpluginprocessparent.cpp | 47 | ||||
| -rw-r--r-- | indra/llplugin/llpluginprocessparent.h | 20 | 
2 files changed, 35 insertions, 32 deletions
| diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 110fac0f23..f10eaee5b4 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.add(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(); +						LLProcess::Params params; +						params.executable = "/usr/bin/osascript"; +						params.args.add("-e"); +						params.args.add("tell application \"Terminal\""); +						params.args.add("-e"); +						params.args.add(STRINGIZE("set win to do script \"gdb -pid " +												  << mProcess->getProcessID() << "\"")); +						params.args.add("-e"); +						params.args.add("do script \"continue\" in win"); +						params.args.add("-e"); +						params.args.add("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..990fc5cbae 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  { @@ -139,26 +140,27 @@ private:  	};  	EState mState;  	void setState(EState state); -	 +  	bool pluginLockedUp();  	bool pluginLockedUpOrQuit();  	bool accept(); -		 +  	LLSocket::ptr_t mListenSocket;  	LLSocket::ptr_t mSocket;  	U32 mBoundPort; -	 -	LLProcessLauncher mProcess; -	 + +	LLProcess::Params mProcessParams; +	LLProcessPtr mProcess; +  	std::string mPluginFile;  	std::string mPluginDir;  	LLPluginProcessParentOwner *mOwner; -	 +  	typedef std::map<std::string, LLPluginSharedMemory*> sharedMemoryRegionsType;  	sharedMemoryRegionsType mSharedMemoryRegions; -	 +  	LLSD mMessageClassVersions;  	std::string mPluginVersionString; @@ -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. | 
