Fixed web browser thanks to ArminW/Imprudence
This commit is contained in:
49
indra/llplugin/llpluginprocessparent.h
Normal file → Executable file
49
indra/llplugin/llpluginprocessparent.h
Normal file → Executable file
@@ -2,9 +2,10 @@
|
||||
* @file llpluginprocessparent.h
|
||||
* @brief LLPluginProcessParent handles the parent side of the external-process plugin API.
|
||||
*
|
||||
* @cond
|
||||
* $LicenseInfo:firstyear=2008&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2008-2009, Linden Research, Inc.
|
||||
* Copyright (c) 2008-2010, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
@@ -12,13 +13,13 @@
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* online at http://secondlife.com/developers/opensource/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* http://secondlife.com/developers/opensource/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
@@ -28,11 +29,15 @@
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*
|
||||
* @endcond
|
||||
*/
|
||||
|
||||
#ifndef LL_LLPLUGINPROCESSPARENT_H
|
||||
#define LL_LLPLUGINPROCESSPARENT_H
|
||||
|
||||
#include <queue> //imprudence
|
||||
|
||||
#include "llapr.h"
|
||||
#include "llprocesslauncher.h"
|
||||
#include "llpluginmessage.h"
|
||||
@@ -40,12 +45,14 @@
|
||||
#include "llpluginsharedmemory.h"
|
||||
|
||||
#include "lliosocket.h"
|
||||
#include "llthread.h"
|
||||
|
||||
class LLPluginProcessParentOwner
|
||||
{
|
||||
public:
|
||||
virtual ~LLPluginProcessParentOwner();
|
||||
virtual void receivePluginMessage(const LLPluginMessage &message) = 0;
|
||||
virtual bool receivePluginMessageEarly(const LLPluginMessage &message) {return false;};
|
||||
// This will only be called when the plugin has died unexpectedly
|
||||
virtual void pluginLaunchFailed() {};
|
||||
virtual void pluginDied() {};
|
||||
@@ -58,7 +65,10 @@ public:
|
||||
LLPluginProcessParent(LLPluginProcessParentOwner *owner);
|
||||
~LLPluginProcessParent();
|
||||
|
||||
void init(const std::string &launcher_filename, const std::string &plugin_filename, bool debug, const std::string &user_data_path);
|
||||
void init(const std::string &launcher_filename,
|
||||
const std::string &plugin_filename,
|
||||
bool debug);
|
||||
|
||||
void idle(void);
|
||||
|
||||
// returns true if the plugin is on its way to steady state
|
||||
@@ -70,6 +80,9 @@ public:
|
||||
// returns true if the process has exited or we've had a fatal error
|
||||
bool isDone(void);
|
||||
|
||||
// returns true if the process is currently waiting on a blocking request
|
||||
bool isBlocked(void) { return mBlocked; };
|
||||
|
||||
void killSockets(void);
|
||||
|
||||
// Go to the proper error state
|
||||
@@ -83,7 +96,9 @@ public:
|
||||
void receiveMessage(const LLPluginMessage &message);
|
||||
|
||||
// Inherited from LLPluginMessagePipeOwner
|
||||
void receiveMessageRaw(const std::string &message);
|
||||
/*virtual*/ void receiveMessageRaw(const std::string &message);
|
||||
/*virtual*/ void receiveMessageEarly(const LLPluginMessage &message);
|
||||
/*virtual*/ void setMessagePipe(LLPluginMessagePipe *message_pipe) ;
|
||||
|
||||
// This adds a memory segment shared with the client, generating a name for the segment. The name generated is guaranteed to be unique on the host.
|
||||
// The caller must call removeSharedMemory first (and wait until getSharedMemorySize returns 0 for the indicated name) before re-adding a segment with the same name.
|
||||
@@ -106,7 +121,11 @@ public:
|
||||
void setLockupTimeout(F32 timeout) { mPluginLockupTimeout = timeout; };
|
||||
|
||||
F64 getCPUUsage() { return mCPUUsage; };
|
||||
|
||||
|
||||
static void poll(F64 timeout);
|
||||
static bool canPollThreadRun() { return (sPollSet || sPollsetNeedsRebuild || sUseReadThread); };
|
||||
static void setUseReadThread(bool use_read_thread);
|
||||
static bool getUseReadThread() { return sUseReadThread; };
|
||||
private:
|
||||
|
||||
enum EState
|
||||
@@ -128,6 +147,7 @@ private:
|
||||
};
|
||||
EState mState;
|
||||
void setState(EState state);
|
||||
std::string stateToString(EState state);
|
||||
|
||||
bool pluginLockedUp();
|
||||
bool pluginLockedUpOrQuit();
|
||||
@@ -142,8 +162,6 @@ private:
|
||||
|
||||
std::string mPluginFile;
|
||||
|
||||
std::string mUserDataPath;
|
||||
|
||||
LLPluginProcessParentOwner *mOwner;
|
||||
|
||||
typedef std::map<std::string, LLPluginSharedMemory*> sharedMemoryRegionsType;
|
||||
@@ -158,12 +176,27 @@ private:
|
||||
|
||||
bool mDisableTimeout;
|
||||
bool mDebug;
|
||||
bool mBlocked;
|
||||
bool mPolledInput;
|
||||
|
||||
LLProcessLauncher 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.
|
||||
|
||||
static bool sUseReadThread;
|
||||
apr_pollfd_t mPollFD;
|
||||
static apr_pollset_t *sPollSet;
|
||||
static bool sPollsetNeedsRebuild;
|
||||
static LLMutex *sInstancesMutex;
|
||||
static std::list<LLPluginProcessParent*> sInstances;
|
||||
static void dirtyPollSet();
|
||||
static void updatePollset();
|
||||
void servicePoll();
|
||||
static LLThread *sReadThread;
|
||||
|
||||
LLMutex mIncomingQueueMutex;
|
||||
std::queue<LLPluginMessage> mIncomingQueue;
|
||||
};
|
||||
|
||||
#endif // LL_LLPLUGINPROCESSPARENT_H
|
||||
|
||||
Reference in New Issue
Block a user