diff options
author | Michael Meeks <michael.meeks@novell.com> | 2011-03-21 15:00:18 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@novell.com> | 2011-03-21 21:18:41 +0000 |
commit | cda1a3fa9c2e6008706b2aaa58929242a59144f6 (patch) | |
tree | b9d0b568b215edf9f2a5f277ca37cf681f5a2dae | |
parent | 273ea24a16997b279b7d9969c25497cf55773fac (diff) |
re-work start process to enable earlier splash and faster start
-rwxr-xr-x | desktop/prj/build.lst | 2 | ||||
-rwxr-xr-x | desktop/scripts/soffice.sh | 123 | ||||
-rwxr-xr-x | desktop/source/pagein/makefile.mk | 5 | ||||
-rw-r--r-- | desktop/source/pagein/pagein-main.c | 12 | ||||
-rwxr-xr-x | desktop/source/pagein/pagein.c | 5 | ||||
-rwxr-xr-x | desktop/unx/source/makefile.mk | 20 | ||||
-rwxr-xr-x | desktop/unx/source/splashx.c | 27 | ||||
-rwxr-xr-x | desktop/unx/source/start.c | 287 |
8 files changed, 304 insertions, 177 deletions
diff --git a/desktop/prj/build.lst b/desktop/prj/build.lst index bef09600c23e..26e9e046535b 100755 --- a/desktop/prj/build.lst +++ b/desktop/prj/build.lst @@ -20,9 +20,9 @@ dt desktop\win32\source\rebase nmake - w dt_rebase dt_inc NULL dt desktop\os2\source\applauncher nmake - p dt_applauncher dt_inc NULL dt desktop\unx\source\officeloader nmake - u dt_officeloader_unx dt_inc NULL dt desktop\unx\source nmake - u dt_uwrapper dt_inc NULL -dt desktop\unx\splash nmake - u dt_usplash dt_inc NULL dt desktop\source\pagein nmake - u dt_pagein dt_inc NULL dt desktop\source\pkgchk\unopkg nmake - all dt_unopkg dt_dp_misc dt_app dt_inc dt_guiloader.w NULL +dt desktop\unx\splash nmake - u dt_usplash dt_pagein.u dt_inc NULL dt desktop\source\deployment nmake - all dt_deployment dt_dp_manager dt_dp_registry dt_dp_registry_package dt_dp_registry_executable dt_dp_registry_help dt_dp_registry_script dt_dp_registry_sfwk dt_dp_registry_component dt_dp_registry_configuration dt_dp_unopkg dt_inc dt_dp_misc NULL dt desktop\source\deployment\misc nmake - all dt_dp_misc dt_inc NULL dt desktop\source\deployment\unopkg nmake - all dt_dp_unopkg dt_inc NULL diff --git a/desktop/scripts/soffice.sh b/desktop/scripts/soffice.sh index 236ffd43fa3c..6379412ead05 100755 --- a/desktop/scripts/soffice.sh +++ b/desktop/scripts/soffice.sh @@ -39,6 +39,19 @@ export SAL_ENABLE_FILE_LOCKING # working on your system. # SAL_NOOPENGL=true; export SAL_NOOPENGL +unset XENVIRONMENT + +# uncomment line below to disable anti aliasing of fonts +# SAL_ANTIALIAS_DISABLE=true; export SAL_ANTIALIAS_DISABLE + +# uncomment line below if you encounter problems starting soffice on your system +# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS + +# read database entries for Adabas D +if [ -f /etc/adabasrc ]; then + . /etc/adabasrc +fi + # The following is needed on Linux PPC with IBM j2sdk142: #@# export JITC_PROCESSOR_TYPE=6 @@ -66,8 +79,6 @@ if [ "$VALGRIND" != "" ]; then export G_SLICE fi -sd_binary=`basename "$0" | sed 's/libreoffice/soffice/g'`.bin - case "`uname -s`" in NetBSD|OpenBSD|FreeBSD|DragonFly) # this is a temporary hack until we can live with the default search paths @@ -86,109 +97,5 @@ AIX) ;; esac -#collect all bootstrap variables specified on the command line -#so that they can be passed as arguments to javaldx later on -for arg in $@ -do - case "$arg" in - -env:*) BOOTSTRAPVARS=$BOOTSTRAPVARS" ""$arg";; - esac -done - -# test for availability of the fast external splash -for arg in $@; do - case "$arg" in - --nologo|-nologo|--no-oosplash|-no-oosplash|--version|-version|--help|-help|-h|-\?) - no_oosplash=y - ;; - esac -done - -# Setup our app as oosplash, but try to avoid executing pagein, -# and other expensive environment setup pieces wherever possible -# for a second started office -if [ "$sd_binary" = "soffice.bin" -a -x "$sd_prog/oosplash.bin" ] && [ "$no_oosplash" != "y" ] ; then - sd_binary="oosplash.bin" - - # try to connect to a running instance early - if $VALGRINDCHECK "$sd_prog/$sd_binary" -qsend-and-report "$@" ; then - exit 0 - fi -fi - -# pagein -sd_pagein_args=@pagein-common -for sd_arg in "$@"; do - case ${sd_arg} in - --calc|-calc) - sd_pagein_args="${sd_pagein_args} @pagein-calc" - break; - ;; - --draw|-draw) - sd_pagein_args="${sd_pagein_args} @pagein-draw" - break; - ;; - --impress|-impress) - sd_pagein_args="${sd_pagein_args} @pagein-impress" - break; - ;; - --writer|-writer) - sd_pagein_args="${sd_pagein_args} @pagein-writer" - break; - ;; - esac -done -"$sd_prog/../basis-link/program/pagein" -L"$sd_prog/../basis-link/program" \ - ${sd_pagein_args} - -# extend the ld_library_path for java: javaldx checks the sofficerc for us -if [ -x "$sd_prog/../basis-link/ure-link/bin/javaldx" ] ; then - my_path=`"$sd_prog/../basis-link/ure-link/bin/javaldx" $BOOTSTRAPVARS \ - "-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc"` - if [ -n "$my_path" ] ; then - sd_platform=`uname -s` - case $sd_platform in - AIX) - LIBPATH=$my_path${LIBPATH:+:$LIBPATH} - export LIBPATH - ;; - *) - LD_LIBRARY_PATH=$my_path${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} - export LD_LIBRARY_PATH - ;; - esac - fi -fi - -unset XENVIRONMENT - -# uncomment line below to disable anti aliasing of fonts -# SAL_ANTIALIAS_DISABLE=true; export SAL_ANTIALIAS_DISABLE - -# uncomment line below if you encounter problems starting soffice on your system -# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS - -# read database entries for Adabas D -if [ -f /etc/adabasrc ]; then - . /etc/adabasrc -fi - -# execute soffice binary -$VALGRINDCHECK "$sd_prog/$sd_binary" "$@" & -trap 'kill -9 $!' TERM -wait $! -sd_ret=$? - -while [ $sd_ret -eq 79 -o $sd_ret -eq 81 ] -do - if [ $sd_ret -eq 79 ]; then - $VALGRINDCHECK "$sd_prog/$sd_binary" ""$BOOTSTRAPVARS"" & - elif [ $sd_ret -eq 81 ]; then - $VALGRINDCHECK "$sd_prog/$sd_binary" "$@" & - fi - - wait $! - sd_ret=$? -done - -exit $sd_ret +# oosplash does the rest: forcing pages in, javaldx etc. are +exec $VALGRINDCHECK "$sd_prog/oosplash.bin" "$@" diff --git a/desktop/source/pagein/makefile.mk b/desktop/source/pagein/makefile.mk index 09248d4f9469..205e03c95863 100755 --- a/desktop/source/pagein/makefile.mk +++ b/desktop/source/pagein/makefile.mk @@ -45,6 +45,7 @@ LIBSALCPPRT=$(0) OBJFILES= \ $(OBJ)$/pagein.obj \ + $(OBJ)$/pagein-main.obj \ $(OBJ)$/file_image_unx.obj APP1TARGET=$(TARGET) @@ -77,24 +78,28 @@ UREMISCPATH=..$/ure-link$/share$/misc $(MISC)$/$(TARGET)-calc : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sc$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)scui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ $(MISC)$/$(TARGET)-draw : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sd$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)sdui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ $(MISC)$/$(TARGET)-impress : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sd$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)sdui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ $(MISC)$/$(TARGET)-writer : makefile.mk @echo Making: $@ @-echo $(DLLPRE)sw$(DFTDLLPOST) > $@ + @-echo $(DLLPRE)swui$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svx$(DFTDLLPOST) >> $@ @-echo $(DLLPRE)svxcore$(DFTDLLPOST) >> $@ diff --git a/desktop/source/pagein/pagein-main.c b/desktop/source/pagein/pagein-main.c new file mode 100644 index 000000000000..f8fe82ab0ab2 --- /dev/null +++ b/desktop/source/pagein/pagein-main.c @@ -0,0 +1,12 @@ +#include <stdio.h> +/* + * De-coupled to allow pagein to be re-used in the unx + * splash / quick-starter + */ +extern int pagein_execute (int argc, char **argv); + +int main (int argc, char **argv) +{ + return pagein_execute (argc, argv); +} + diff --git a/desktop/source/pagein/pagein.c b/desktop/source/pagein/pagein.c index 39c319fc2d72..23585eb026ca 100755 --- a/desktop/source/pagein/pagein.c +++ b/desktop/source/pagein/pagein.c @@ -58,8 +58,10 @@ cleanup_and_leave: return (result); } +extern int pagein_execute (int argc, char **argv); + /* main */ -int main (int argc, char **argv) +int pagein_execute (int argc, char **argv) { int i, v = 0; size_t nfiles = 0, nbytes = 0; @@ -103,7 +105,6 @@ int main (int argc, char **argv) continue; } - if ((argv[i][0] == '@') && ((fp = fopen (argv[i], "r")) == 0)) { char path[1024]; diff --git a/desktop/unx/source/makefile.mk b/desktop/unx/source/makefile.mk index 494477a0c4d1..820520153a8e 100755 --- a/desktop/unx/source/makefile.mk +++ b/desktop/unx/source/makefile.mk @@ -32,33 +32,31 @@ NO_DEFAULT_STL=TRUE .INCLUDE : settings.mk -.IF "$(ENABLE_UNIX_QUICKSTARTER)"!="TRUE" - -dummy: - @echo "Unix quickstarter disabled" - -.ELSE +.IF "$(ENABLE_QUICKSTART_LIBPNG)"!="TRUE" +CFLAGS+=-DENABLE_QUICKSTART_LIBPNG +.ENDIF STDLIB= - CFLAGS+=$(LIBPNG_CFLAGS) OBJFILES= \ $(OBJ)$/splashx.obj \ $(OBJ)$/start.obj +PAGEIN_OBJS= \ + $(OBJ)$/pagein.obj \ + $(OBJ)$/file_image_unx.obj + APP1TARGET = $(TARGET) APP1RPATH = BRAND -APP1OBJS = $(OBJFILES) +APP1OBJS = $(OBJFILES) $(PAGEIN_OBJS) APP1LIBSALCPPRT= APP1CODETYPE = C -APP1STDLIBS = $(SALLIB) -lX11 $(LIBPNG_LIBS) +APP1STDLIBS = $(STDLIBGUIMT) $(SALLIB) $(LIBPNG_LIBS) .IF "$(OS)"=="SOLARIS" APP1STDLIBS+= -lsocket .ENDIF -.ENDIF # ENABLE_UNIX_QUICKSTARTER - # --- Targets ------------------------------------------------------ .INCLUDE : target.mk diff --git a/desktop/unx/source/splashx.c b/desktop/unx/source/splashx.c index 4aa562269aba..9cc6832399b5 100755 --- a/desktop/unx/source/splashx.c +++ b/desktop/unx/source/splashx.c @@ -25,6 +25,9 @@ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable * instead of those above. */ + +#ifdef ENABLE_QUICKSTART_LIBPNG + #include <X11/Xlib.h> #include <X11/Xatom.h> #include <X11/Xutil.h> @@ -620,4 +623,28 @@ void splash_close_window() bitmap_rows = NULL; } +#else /* not ENABLE_QUICKSTART_LIBPNG */ + +/* Stubs that will never be called in this case */ + +int splash_load_bmp( const char *filename ) +{ + return 1; +} +void splash_setup( int barc[3], int framec[3], int posx, int posy, int w, int h ) +{ +} +int splash_create_window( int argc, char** argv ) +{ + return 1; +} +void splash_close_window() +{ +} +void splash_draw_progress( int progress ) +{ +} + +#endif // ENABLE_QUICKSTART_LIBPNG + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/unx/source/start.c b/desktop/unx/source/start.c index 73d496652772..c381d09443aa 100755 --- a/desktop/unx/source/start.c +++ b/desktop/unx/source/start.c @@ -49,14 +49,7 @@ #include "splashx.h" -/* - * magic argument - if passed, not passed onto soffice.bin but we exit - * immediately if we fail to control the process. Used to avoid doing - * an un-conditional pagein - */ -#define QSEND_AND_REPORT "-qsend-and-report" - -#define IMG_SUFFIX ".png" +#define IMG_SUFFIX ".png" #define PIPEDEFAULTPATH "/tmp" #define PIPEALTERNATEPATH "/var/tmp" @@ -353,10 +346,6 @@ send_args( int fd, rtl_uString *pCwdPath ) osl_getCommandArg( nArg, &pTmp ); - if ( rtl_uString_getLength( pTmp ) == 0 || - !rtl_ustr_ascii_compare( pTmp->buffer, QSEND_AND_REPORT ) ) - continue; - // this is not a param, we have to prepend filenames with file:// // FIXME: improve the check if ( ( pTmp->buffer[0] != (sal_Unicode)'-' ) ) @@ -651,25 +640,174 @@ system_checks( void ) /* check proc is mounted - lots of things fail otherwise */ if ( stat( "/proc/version", &buf ) != 0 ) { - fprintf( stderr, "ERROR: /proc not mounted - OO.o is unlikely to work well if at all" ); + fprintf( stderr, "ERROR: /proc not mounted - LibreOffice is unlikely to work well if at all" ); exit( 1 ); } #endif } -/* Start the OOo application */ -static sal_Bool -fork_app( rtl_uString *pAppPath, int *status_fd ) +/* re-use the pagein code */ +extern int pagein_execute (int argc, char **argv); + +/* parameters from the main thread */ +int status_fd = 0; +int status_pipe[2]; +rtl_uString *pAppPath = NULL; + +void +exec_pagein (void) +{ + char buffer[64] = ""; + char *argv[5]; + sal_uInt32 nArgs, i, j; + static const char *cmd_names[] = { "writer", "impress", "draw", "calc" }; + + argv[0] = "dummy-pagein"; + argv[1] = "-L../basis-link/program"; + argv[2] = "@pagein-common"; + argv[3] = buffer; + argv[4] = NULL; + + nArgs = osl_getCommandArgCount(); + for ( i = 0; i < nArgs; ++i ) + { + rtl_uString *pArg = NULL; + osl_getCommandArg( i, &pArg ); + + sal_Int32 length = pArg->length; + const sal_Unicode *arg = pArg->buffer; + while (length > 2 && arg[0] == '-') { + arg++; length--; + } + + for ( j = 0; j < SAL_N_ELEMENTS (cmd_names); ++j ) { + if (!rtl_ustr_indexOfAscii_WithLength( + arg, length, cmd_names[j], strlen (cmd_names[j]))) { + strcpy (buffer, "@pagein-"); + strcat (buffer, cmd_names[j]); + goto found_app; + } + } + } + found_app: + pagein_execute (buffer[0] != '\0' ? 4 : 3, argv); +} + +static void extend_library_path (const char *new_element) +{ + const char *pathname; +#ifdef AIX + pathname = "LIBPATH"; +#else + pathname = "LD_LIBRARY_PATH"; +#endif + char *buffer; + char *oldpath; + + oldpath = getenv (pathname); + buffer = malloc (strlen (new_element) + strlen (pathname) + + (oldpath ? strlen (oldpath) : 0)+ 4); + strcpy (buffer, pathname); + strcpy (buffer, "="); + strcpy (buffer, new_element); + if (oldpath) { + strcat (buffer, ":"); + strcat (buffer, oldpath); + } + + /* deliberately leak buffer - many OS' don't dup at this point */ + putenv (buffer); +} + +static void +exec_javaldx (void) +{ + char *newpath; + sal_Sequence *line; + sal_uInt32 i, j, nArgs; + rtl_uString *pApp = NULL; + rtl_uString **ppArgs; + rtl_uString *pEnvironment[1] = { NULL }; + + nArgs = osl_getCommandArgCount(); + ppArgs = (rtl_uString **)calloc( nArgs + 2, sizeof( rtl_uString* ) ); + +#warning FIXME - copy this and just sort the arguments globally first ... + + for ( j = i = 0; i < nArgs; ++i ) + { + rtl_uString *pTmp = NULL; + osl_getCommandArg( i, &pTmp ); + if (rtl_ustr_ascii_compare_WithLength (pTmp->buffer, 5, "-env:")) + { + rtl_uString_acquire (pTmp); + ppArgs[j++] = pTmp; + } + rtl_uString_release (pTmp); + } + + /* FIXME: do we need to check / turn program/redirectrc into an absolute path ? */ + rtl_uString_newFromAscii( &ppArgs[j++], "-env:INIFILENAME=vnd.sun.star.pathname:./redirectrc" ); + + oslProcess javaldx = NULL; + oslFileHandle fileOut= 0; + oslProcessError err; + + rtl_uString_newFromAscii( &pApp, "../ure/bin/javaldx" ); + /* unset to avoid bogus output */ + rtl_uString_newFromAscii( &pEnvironment[0], "G_SLICE" ); + err = osl_executeProcess_WithRedirectedIO( pApp, ppArgs, j, + osl_Process_HIDDEN, + NULL, // security + NULL, // work dir + pEnvironment, 1, + &javaldx, // handle + NULL, + &fileOut, + NULL); + + if( err != osl_Process_E_None) + { + fprintf (stderr, "Warning: failed to launch javaldx - java may not fuction correctly\n"); + return; + } + + line = NULL; + if (!osl_readLine (fileOut, &line) || !line) { + fprintf (stderr, "Warning: failed to read path from javaldx\n"); + return; + } + + if (!line->nElements) + fprintf (stderr, "curious - javaldx returns zero length path\n"); + else { + newpath = malloc (line->nElements + 1); + strncpy (newpath, line->elements, line->nElements); + newpath[line->nElements] = '\0'; + + fprintf (stderr, "Adding javaldx path of '%s'\n", newpath); + extend_library_path (newpath); + } + + /* FIXME: should we join it first ? */ + osl_freeProcessHandle(javaldx); +} + +static void SAL_CALL +fork_app_thread( void *dummy ) { + (void)dummy; rtl_uString *pApp = NULL, *pTmp = NULL, *pArg = NULL; rtl_uString **ppArgs; sal_uInt32 nArgs, i; + sal_Bool restart; - oslProcess aProcess; + oslProcess child; oslProcessError nError; - int status_pipe[2]; - system_checks(); + exec_pagein (); + + exec_javaldx (); /* application name */ rtl_uString_newFromAscii( &pApp, "file://" ); @@ -689,13 +827,6 @@ fork_app( rtl_uString *pAppPath, int *status_fd ) rtl_uString_newFromString( &(ppArgs[i]), pTmp ); } - /* create pipe */ - if ( pipe( status_pipe ) < 0 ) - { - fprintf( stderr, "ERROR: no file handles\n"); - exit( 1 ); - } - /* add the pipe arg */ sal_Unicode pUnicode[RTL_USTR_MAX_VALUEOFINT32]; rtl_ustr_valueOfInt32( pUnicode, status_pipe[1], 10 ); @@ -708,25 +839,50 @@ fork_app( rtl_uString *pAppPath, int *status_fd ) rtl_uString_newFromString( &(ppArgs[nArgs]), pArg ); ++nArgs; - /* start the OOo process */ - nError = osl_executeProcess( pApp, ppArgs, nArgs, - osl_Process_DETACHED | osl_Process_NORMAL, - NULL, - NULL, - NULL, 0, - &aProcess ); + restart = sal_False; + do + { + oslProcessInfo info; - *status_fd = status_pipe[0]; - close( status_pipe[1] ); + /* start the main process */ + nError = osl_executeProcess( pApp, ppArgs, nArgs, + osl_Process_NORMAL, + NULL, + NULL, + NULL, 0, + &child ); - if ( nError != osl_Process_E_None ) - { - fprintf( stderr, "ERROR %d forking process", nError ); - ustr_debug( "", pApp ); - return sal_False; + if ( nError != osl_Process_E_None ) + { + fprintf( stderr, "ERROR %d forking process", nError ); + ustr_debug( "", pApp ); + _exit (1); + } + + /* wait for it to complete */ + osl_joinProcess (child); + + info.Size = sizeof (info); + info.Code = 0; + if (osl_getProcessInfo (child, osl_Process_EXITCODE, &info) != osl_Process_E_None) + fprintf (stderr, "Warning: failed to fetch libreoffice exit status\n"); + + switch (info.Code) { + case 79: // re-start with just -env: parameters + fprintf (stderr, "FIXME: re-start with just -env: params !\n"); + restart = sal_True; + break; + case 81: // re-start with all arguments + fprintf (stderr, "FIXME: re-start with all params !\n"); + restart = sal_True; + break; + default: + break; + } } + while (restart); - return sal_True; + close( status_pipe[1] ); } /* Check if 'pArg' is -pCmpWith or --pCmpWith */ @@ -748,11 +904,12 @@ arg_check( rtl_uString *pArg, const char *pCmpWith ) } static const char *ppInhibit[] = { - "nologo", "headless", "invisible", "help", "h", "?", "minimized", - NULL }; + "nologo", "headless", "invisible", "help", "h", "?", + "minimized", "version", NULL +}; static const char *ppTwoArgs[] = { - "pt", "display", - NULL }; + "pt", "display", NULL +}; /* Read command line parameters and return whether we display the splash. */ static sal_Bool @@ -804,18 +961,24 @@ get_inhibit_splash() SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv ) { - int fd = 0, status_fd = 0; - sal_Bool bInhibitSplash, bSendAndReport; + int fd = 0; + sal_Bool bInhibitSplash; sal_Bool bSentArgs = sal_False; - rtl_uString *pAppPath = NULL; rtl_uString *pPipePath = NULL; ProgressStatus eResult = ProgressExit; + fprintf (stderr, "start !\n"); + /* turn SIGPIPE into an error */ signal( SIGPIPE, SIG_IGN ); bInhibitSplash = get_inhibit_splash(); +#ifndef ENABLE_QUICKSTART_LIBPNG + /* we can't load and render it anyway */ + bInhibitSplash = sal_True; +#endif + pAppPath = get_app_path( argv[0] ); if ( !pAppPath ) { @@ -824,15 +987,17 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv ) } ustr_debug( "App path", pAppPath ); - bSendAndReport = argc > 1 && !strcmp (argv[1], QSEND_AND_REPORT); - pPipePath = get_pipe_path( pAppPath ); + fprintf (stderr, "try pipe !\n"); + if ( ( fd = connect_pipe( pPipePath ) ) >= 0 ) { rtl_uString *pCwdPath = NULL; osl_getProcessWorkingDir( &pCwdPath ); + fprintf (stderr, "send args !\n"); + bSentArgs = send_args( fd, pCwdPath ); } #if OSL_DEBUG_LEVEL > 0 @@ -840,12 +1005,21 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv ) ustr_debug( "Failed to connect to pipe", pPipePath ); #endif - if ( !bSendAndReport && !bSentArgs ) + if ( !bSentArgs ) { - /* we have to exec the binary */ + /* we have to prepare for, and exec the binary */ do { - if ( !fork_app( pAppPath, &status_fd ) ) - return 1; + /* sanity check pieces */ + system_checks(); + + /* create pipe */ + if ( pipe( status_pipe ) < 0 ) + { + fprintf( stderr, "ERROR: no file handles\n"); + exit( 1 ); + } + int status_fd = status_pipe[0]; + osl_createThread( fork_app_thread, NULL ); if ( !bInhibitSplash ) { @@ -861,6 +1035,9 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv ) } close( status_fd ); + + fprintf (stderr, "sleep!\n"); + sleep (100); } while ( eResult == ProgressRestart ); } @@ -870,7 +1047,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv ) close( fd ); - return bSendAndReport? !bSentArgs : 0; + return 0; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |