[Libreoffice-commits] core.git: desktop/inc desktop/source

Jesús Corrius jcorrius at gmail.com
Sun Aug 18 03:43:51 PDT 2013


 desktop/inc/app.hxx                    |    1 
 desktop/source/app/app.cxx             |   22 ++------------
 desktop/source/app/officeipcthread.cxx |   50 ++++++++++++---------------------
 desktop/source/app/officeipcthread.hxx |    3 -
 4 files changed, 24 insertions(+), 52 deletions(-)

New commits:
commit b0041fd68ae1a9df91f8c3274e0b4003ef914a44
Author: Jesús Corrius <jcorrius at gmail.com>
Date:   Wed Aug 14 16:04:31 2013 +0200

    Revert "Fixing i#119950 warn about other running terminal sessions"
    
    This reverts commit b218cbf59de4d7ae0a6962995fb0f719ed68b5d2.
    
    The original patch just looks for another instance running which
    of course can be in the same terminal session. The assumptions
    the author makes are wrong.
    
    The bug the patch tries to solve is real and we'll probably
    have to solve it in the future, but not this way.
    
    Conflicts:
    
    	desktop/source/app/officeipcthread.cxx
    
    Change-Id: I1e645671aa09c6147163820c12d5efb3b3688bd1
    Reviewed-on: https://gerrit.libreoffice.org/5415
    Reviewed-by: Fridrich Strba <fridrich at documentfoundation.org>
    Tested-by: Fridrich Strba <fridrich at documentfoundation.org>

diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx
index 04153ef..d949304 100644
--- a/desktop/inc/app.hxx
+++ b/desktop/inc/app.hxx
@@ -64,7 +64,6 @@ class Desktop : public Application
             BE_LANGUAGE_MISSING,
             BE_USERINSTALL_NOTENOUGHDISKSPACE,
             BE_USERINSTALL_NOWRITEACCESS,
-            BE_MULTISESSION_NOT_SUPPORTED,
             BE_OFFICECONFIG_BROKEN
         };
         enum BootstrapStatus
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index c4e9729..b436ade 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -415,10 +415,7 @@ OUString MakeStartupConfigAccessErrorMessage( OUString const & aInternalErrMsg )
 // are allowed. Otherwise we will force a "crash inside a crash".
 // Thats why we have to use a special native message box here which does not use yield :-)
 //=============================================================================
-
-// #i119950# Add a option that not to display the "Fatal Error" on dialog title
-void FatalError(const OUString& sMessage, const bool isDisplayErrorString = true);
-void FatalError(const OUString& sMessage, const bool isDisplayErrorString)
+void FatalError(const OUString& sMessage)
 {
     OUString sProductKey = ::utl::Bootstrap::getProductKey();
     if ( sProductKey.isEmpty())
@@ -432,9 +429,8 @@ void FatalError(const OUString& sMessage, const bool isDisplayErrorString)
 
     OUStringBuffer sTitle (128);
     sTitle.append      (sProductKey     );
-    if (isDisplayErrorString) {
-        sTitle.appendAscii (" - Fatal Error");
-    }
+    sTitle.appendAscii (" - Fatal Error");
+
     Application::ShowNativeErrorBox (sTitle.makeStringAndClear (), sMessage);
     _exit(EXITHELPER_FATAL_ERROR);
 }
@@ -626,10 +622,6 @@ void Desktop::Init()
         {
             SetBootstrapError( BE_PATHINFO_MISSING, OUString() );
         }
-        else if ( aStatus == OfficeIPCThread::IPC_STATUS_MULTI_TS_ERROR )
-        {
-            SetBootstrapError( BE_MULTISESSION_NOT_SUPPORTED, OUString() );
-        }
         else if ( aStatus == OfficeIPCThread::IPC_STATUS_2ND_OFFICE )
         {
             // 2nd office startup should terminate after sending cmdlineargs through pipe
@@ -856,13 +848,7 @@ OUString    Desktop::CreateErrorMsgString(
 void Desktop::HandleBootstrapErrors(
     BootstrapError aBootstrapError, OUString const & aErrorMessage )
 {
-    if ( aBootstrapError == BE_MULTISESSION_NOT_SUPPORTED ) {
-        OUString        aMessage;
-        aMessage = GetMsgString( STR_BOOTSTRAP_ERR_MULTISESSION,
-                        OUString( RTL_CONSTASCII_USTRINGPARAM( "You have another instance running in a different terminal session. Close that instance and then try again." )) );
-        FatalError(aMessage,sal_False);
-
-    } else if ( aBootstrapError == BE_PATHINFO_MISSING )
+    if ( aBootstrapError == BE_PATHINFO_MISSING )
     {
         OUString                    aErrorMsg;
         OUString                    aBuffer;
diff --git a/desktop/source/app/officeipcthread.cxx b/desktop/source/app/officeipcthread.cxx
index 14000eb..e897ee1 100644
--- a/desktop/source/app/officeipcthread.cxx
+++ b/desktop/source/app/officeipcthread.cxx
@@ -522,42 +522,30 @@ OfficeIPCThread::Status OfficeIPCThread::EnableOfficeIPCThread()
     do
     {
         osl::Security &rSecurity = Security::get();
-        // #119950# Try to connect pipe first. If connected, means another instance already launched.
-        if ( pThread->maPipe.create( aPipeIdent.getStr(), osl_Pipe_OPEN, rSecurity ))
-        {
-            // #119950# Test if launched in a new terminal session for same user. On Windows platform, normally a user is resticted
-            // to have only one terminal session. But if mutiple terminal session for one user is allowed, crash will happen if launched
-            // LibreOffice from more than one terminal session. So need to detect and prevent this happen.
-
-            // Will try to create a same name pipe. If creation is successfully, means current instance is launched in a new session.
-            osl::Pipe  aSessionPipe;
-            if ( aSessionPipe.create( aPipeIdent.getStr(), osl_Pipe_OPEN, rSecurity )) {
-                // Can create a pipe with same name. This can only happen in multiple terminal session environment on Windows platform.
-                // Will display a warning dialog and exit.
-                return IPC_STATUS_MULTI_TS_ERROR;
-            } else {
-                osl::StreamPipe aStreamPipe(pThread->maPipe.getHandle());
-                if (readStringFromPipe(aStreamPipe) == SEND_ARGUMENTS)
-                {
-                    // Pipe connected to first office
-                    nPipeMode = PIPEMODE_CONNECTED;
-                }
-                else
-                {
-                    // Pipe connection failed (other office exited or crashed)
-                    TimeValue tval;
-                    tval.Seconds = 0;
-                    tval.Nanosec = 500000000;
-                    salhelper::Thread::wait( tval );
-                }
-            }
 
-        }
-        else if ( pThread->maPipe.create( aPipeIdent.getStr(), osl_Pipe_CREATE, rSecurity )) // Connection not successfull, now we try to create
+        // Try to create pipe
+        if ( pThread->maPipe.create( aPipeIdent.getStr(), osl_Pipe_CREATE, rSecurity ))
         {
             // Pipe created
             nPipeMode = PIPEMODE_CREATED;
         }
+        else if( pThread->maPipe.create( aPipeIdent.getStr(), osl_Pipe_OPEN, rSecurity )) // Creation not successful, now we try to connect
+        {
+            osl::StreamPipe aStreamPipe(pThread->maPipe.getHandle());
+            if (readStringFromPipe(aStreamPipe) == SEND_ARGUMENTS)
+            {
+                // Pipe connected to first office
+                nPipeMode = PIPEMODE_CONNECTED;
+            }
+            else
+            {
+                // Pipe connection failed (other office exited or crashed)
+                TimeValue tval;
+                tval.Seconds = 0;
+                tval.Nanosec = 500000000;
+                salhelper::Thread::wait( tval );
+            }
+        }
         else
         {
             oslPipeError eReason = pThread->maPipe.getError();
diff --git a/desktop/source/app/officeipcthread.hxx b/desktop/source/app/officeipcthread.hxx
index 223e371..a17e116 100644
--- a/desktop/source/app/officeipcthread.hxx
+++ b/desktop/source/app/officeipcthread.hxx
@@ -108,8 +108,7 @@ class OfficeIPCThread : public salhelper::Thread
         IPC_STATUS_OK,
         IPC_STATUS_2ND_OFFICE,
         IPC_STATUS_PIPE_ERROR,
-        IPC_STATUS_BOOTSTRAP_ERROR,
-        IPC_STATUS_MULTI_TS_ERROR
+        IPC_STATUS_BOOTSTRAP_ERROR
     };
 
     // controlling pipe communication during shutdown


More information about the Libreoffice-commits mailing list