Return-Path: X-Original-To: apmail-commons-dev-archive@www.apache.org Delivered-To: apmail-commons-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2D0539ED0 for ; Fri, 4 Nov 2011 13:23:06 +0000 (UTC) Received: (qmail 44293 invoked by uid 500); 4 Nov 2011 13:23:05 -0000 Delivered-To: apmail-commons-dev-archive@commons.apache.org Received: (qmail 44213 invoked by uid 500); 4 Nov 2011 13:23:05 -0000 Mailing-List: contact dev-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Commons Developers List" Delivered-To: mailing list dev@commons.apache.org Received: (qmail 44204 invoked by uid 99); 4 Nov 2011 13:23:05 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Nov 2011 13:23:05 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of sebbaz@gmail.com designates 209.85.220.171 as permitted sender) Received: from [209.85.220.171] (HELO mail-vx0-f171.google.com) (209.85.220.171) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 04 Nov 2011 13:22:57 +0000 Received: by vcbfk14 with SMTP id fk14so1770930vcb.30 for ; Fri, 04 Nov 2011 06:22:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; bh=EQ54UWEc6IP6ZBTM5vkEEG7QIIQrEcZjV3NsXTZCe+s=; b=l5SrcFBQPJj1jzqv17obYGTYPipgeA/pivuJOKIWvyX8POsUH8zb06yCocVrLosSis XS8ZJFL6DbV7Ls5onDqD+QsH6BRxR8NkFJzRYOpupg0OURsNkNcVceHmPS/PYIz5A7Hc a8wH1D4QVSvnqQuwUlZgyOrALI1c+bF82yk0Q= MIME-Version: 1.0 Received: by 10.52.186.230 with SMTP id fn6mr14574120vdc.76.1320412956624; Fri, 04 Nov 2011 06:22:36 -0700 (PDT) Received: by 10.220.151.136 with HTTP; Fri, 4 Nov 2011 06:22:36 -0700 (PDT) In-Reply-To: <20111104125209.3433423889FA@eris.apache.org> References: <20111104125209.3433423889FA@eris.apache.org> Date: Fri, 4 Nov 2011 13:22:36 +0000 Message-ID: Subject: Re: svn commit: r1197541 - in /commons/proper/daemon/trunk/src/native/windows: apps/prunsrv/prunsrv.c src/javajni.c From: sebb To: dev@commons.apache.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org On 4 November 2011 12:52, wrote: > Author: mturk > Date: Fri Nov =A04 12:52:08 2011 > New Revision: 1197541 > > URL: http://svn.apache.org/viewvc?rev=3D1197541&view=3Drev > Log: > Make a code a bit safer on invalid parameters. Make sure it doesn't crash= at least The default --StartClass is now "Main", and --StopClass defaults to "java/lang/System" - in which case the default --StopMethod is "exit" - is that correct? If so, I can update the docs accordingly. > Modified: > =A0 =A0commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsr= v.c > =A0 =A0commons/proper/daemon/trunk/src/native/windows/src/javajni.c > > Modified: commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/pru= nsrv.c > URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/= windows/apps/prunsrv/prunsrv.c?rev=3D1197541&r1=3D1197540&r2=3D1197541&view= =3Ddiff > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c= (original) > +++ commons/proper/daemon/trunk/src/native/windows/apps/prunsrv/prunsrv.c= Fri Nov =A04 12:52:08 2011 > @@ -1303,9 +1303,15 @@ void WINAPI serviceMain(DWORD argc, LPTS > =A0 =A0 if (IS_VALID_STRING(SO_STARTMODE)) { > =A0 =A0 =A0 =A0 if (!lstrcmpiW(SO_STARTMODE, PRSRV_JVM)) { > =A0 =A0 =A0 =A0 =A0 =A0 _jni_startup =3D TRUE; > - =A0 =A0 =A0 =A0 =A0 =A0_jni_rclass =A0=3D WideToANSI(SO_STARTCLASS); > - =A0 =A0 =A0 =A0 =A0 =A0/* Exchange all dots with slashes */ > - =A0 =A0 =A0 =A0 =A0 =A0apxStrCharReplaceA(_jni_rclass, '.', '/'); > + =A0 =A0 =A0 =A0 =A0 =A0if (IS_VALID_STRING(SO_STARTCLASS)) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_jni_rclass =A0=3D WideToANSI(SO_STARTCL= ASS); > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Exchange all dots with slashes */ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0apxStrCharReplaceA(_jni_rclass, '.', '/'= ); > + =A0 =A0 =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0 =A0 =A0else { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Presume its main */ > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_jni_rclass =3D WideToANSI(L"Main"); > + =A0 =A0 =A0 =A0 =A0 =A0} > =A0 =A0 =A0 =A0 =A0 =A0 _jni_rparam =3D SO_STARTPARAMS; > =A0 =A0 =A0 =A0 } > =A0 =A0 =A0 =A0 else if (!lstrcmpiW(SO_STARTMODE, PRSRV_JAVA)) { > @@ -1345,14 +1351,14 @@ void WINAPI serviceMain(DWORD argc, LPTS > =A0 =A0 if (IS_VALID_STRING(SO_STOPMODE)) { > =A0 =A0 =A0 =A0 if (!lstrcmpiW(SO_STOPMODE, PRSRV_JVM)) { > =A0 =A0 =A0 =A0 =A0 =A0 _jni_shutdown =3D TRUE; > - =A0 =A0 =A0 =A0 =A0 =A0_jni_sclass =3D WideToANSI(SO_STOPCLASS); > =A0 =A0 =A0 =A0 =A0 =A0 if (IS_VALID_STRING(SO_STOPCLASS)) { > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_jni_sclass =3D WideToANSI(SO_STOPCLASS)= ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 apxStrCharReplaceA(_jni_sclass, '.', '/')= ; > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_jni_sparam =3D SO_STOPPARAMS; > =A0 =A0 =A0 =A0 =A0 =A0 } > =A0 =A0 =A0 =A0 =A0 =A0 else { > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_jni_sclass =3D "java/lang/System"; > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0_jni_sclass =3D WideToANSI(L"java/lang/S= ystem"); > =A0 =A0 =A0 =A0 =A0 =A0 } > + =A0 =A0 =A0 =A0 =A0 =A0_jni_sparam =3D SO_STOPPARAMS; > =A0 =A0 =A0 =A0 } > =A0 =A0 =A0 =A0 else if (!lstrcmpiW(SO_STOPMODE, PRSRV_JAVA)) { > =A0 =A0 =A0 =A0 =A0 =A0 LPWSTR jx =3D NULL, szJH =3D SO_JAVAHOME; > > Modified: commons/proper/daemon/trunk/src/native/windows/src/javajni.c > URL: http://svn.apache.org/viewvc/commons/proper/daemon/trunk/src/native/= windows/src/javajni.c?rev=3D1197541&r1=3D1197540&r2=3D1197541&view=3Ddiff > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- commons/proper/daemon/trunk/src/native/windows/src/javajni.c (origina= l) > +++ commons/proper/daemon/trunk/src/native/windows/src/javajni.c Fri Nov = =A04 12:52:08 2011 > @@ -792,8 +792,18 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP > =A0 =A0 if (hJava->dwType !=3D APXHANDLE_TYPE_JVM) > =A0 =A0 =A0 =A0 return FALSE; > =A0 =A0 lpJava =3D APXHANDLE_DATA(hJava); > - =A0 =A0if (!__apxJvmAttach(lpJava)) > + =A0 =A0if (!lpJava) > =A0 =A0 =A0 =A0 return FALSE; > + =A0 =A0if (IS_EMPTY_STRING(szMethodName)) > + =A0 =A0 =A0 =A0szMethodName =3D "main"; > + =A0 =A0if (lstrcmpA(szClassName, "java/lang/System") =3D=3D 0) { > + =A0 =A0 =A0 =A0/* Usable only for exit method, so force */ > + =A0 =A0 =A0 =A0szSignature =A0=3D "(I)V"; > + =A0 =A0 =A0 =A0szMethodName =3D "exit"; > + =A0 =A0} > + =A0 =A0lstrlcpyA(lpJava->clWorker.sClazz, 1024, szClassName); > + =A0 =A0lstrlcpyA(lpJava->clWorker.sMethod, 512, szMethodName); > + > =A0 =A0 jClazz =3D JNICALL_1(FindClass, JAVA_CLASSSTRING); > =A0 =A0 if (!jClazz) { > =A0 =A0 =A0 =A0 JVM_EXCEPTION_CLEAR(lpJava); > @@ -802,7 +812,6 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP > =A0 =A0 } > =A0 =A0 lpJava->clString.jClazz =3D JNICALL_1(NewGlobalRef, jClazz); > =A0 =A0 JNI_LOCAL_UNREF(jClazz); > - > =A0 =A0 /* Find the class */ > =A0 =A0 jClazz =A0=3D JNICALL_1(FindClass, szClassName); > =A0 =A0 if (!jClazz) { > @@ -814,15 +823,6 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP > =A0 =A0 lpJava->clWorker.jClazz =A0=3D JNICALL_1(NewGlobalRef, jClazz); > =A0 =A0 JNI_LOCAL_UNREF(jClazz); > > - =A0 =A0if (!szMethodName) > - =A0 =A0 =A0 =A0szMethodName =3D "main"; > - =A0 =A0if (lstrcmpA(szClassName, "java/lang/System") =3D=3D 0) { > - =A0 =A0 =A0 =A0/* Usable only for exit method, so force */ > - =A0 =A0 =A0 =A0szSignature =A0=3D "(I)V"; > - =A0 =A0 =A0 =A0szMethodName =3D "exit"; > - =A0 =A0} > - =A0 =A0lstrlcpyA(lpJava->clWorker.sClazz, 1024, szClassName); > - =A0 =A0lstrlcpyA(lpJava->clWorker.sMethod, 512, szMethodName); > =A0 =A0 lpJava->clWorker.jMethod =3D JNICALL_3(GetStaticMethodID, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0lpJava->clWorker.jClazz, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0szMethodName, szSignature); > @@ -855,16 +855,18 @@ apxJavaLoadMainClass(APXHANDLE hJava, LP > =A0*/ > =A0static DWORD WINAPI __apxJavaWorkerThread(LPVOID lpParameter) > =A0{ > -#define WORKER_EXIT(x) =A0{ rv =3D x; goto finished; } > +#define WORKER_EXIT(x) =A0do { rv =3D x; goto finished; } while(0) > =A0 =A0 DWORD rv =3D 0; > - =A0 =A0LPAPXJAVAVM lpJava; > + =A0 =A0LPAPXJAVAVM lpJava =3D NULL; > =A0 =A0 LPAPXJAVA_THREADARGS pArgs =3D (LPAPXJAVA_THREADARGS)lpParameter; > =A0 =A0 APXHANDLE hJava; > > - =A0 =A0hJava =3D (APXHANDLE)pArgs->hJava; > + =A0 =A0hJava =A0=3D (APXHANDLE)pArgs->hJava; > =A0 =A0 if (hJava->dwType !=3D APXHANDLE_TYPE_JVM) > =A0 =A0 =A0 =A0 WORKER_EXIT(1); > - > + =A0 =A0lpJava =3D APXHANDLE_DATA(pArgs->hJava); > + =A0 =A0if (!lpJava) > + =A0 =A0 =A0 =A0WORKER_EXIT(1); > =A0 =A0 if (!apxJavaInitialize(pArgs->hJava, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pArgs->szClassPath= , > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pArgs->lpOptions, > @@ -882,17 +884,16 @@ static DWORD WINAPI __apxJavaWorkerThrea > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pArgs->szClas= sName, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pArgs->szMeth= odName, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 pArgs->lpArgu= ments)) { > - =A0 =A0 =A0 =A0WORKER_EXIT(2); > + =A0 =A0 =A0 =A0WORKER_EXIT(3); > =A0 =A0 } > =A0 =A0 apxJavaSetOut(pArgs->hJava, TRUE, =A0pArgs->szStdErrFilename); > =A0 =A0 apxJavaSetOut(pArgs->hJava, FALSE, pArgs->szStdOutFilename); > > - =A0 =A0lpJava =3D APXHANDLE_DATA(pArgs->hJava); > =A0 =A0 /* Check if we have a class and a method */ > =A0 =A0 if (!lpJava->clWorker.jClazz || !lpJava->clWorker.jMethod) > - =A0 =A0 =A0 =A0WORKER_EXIT(2); > + =A0 =A0 =A0 =A0WORKER_EXIT(4); > =A0 =A0 if (!__apxJvmAttach(lpJava)) > - =A0 =A0 =A0 =A0WORKER_EXIT(3); > + =A0 =A0 =A0 =A0WORKER_EXIT(5); > =A0 =A0 apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread started %s:%s", > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 lpJava->clWorker.sClazz, lpJava->clWorker= .sMethod); > =A0 =A0 lpJava->dwWorkerStatus =3D 1; > @@ -902,26 +903,30 @@ static DWORD WINAPI __apxJavaWorkerThrea > =A0 =A0 =A0 =A0 =A0 =A0 =A0 lpJava->clWorker.jMethod, > =A0 =A0 =A0 =A0 =A0 =A0 =A0 lpJava->clWorker.jArgs); > =A0 =A0 if (JVM_EXCEPTION_CHECK(lpJava)) { > - =A0 =A0 =A0 =A0WORKER_EXIT(4); > + =A0 =A0 =A0 =A0WORKER_EXIT(6); > =A0 =A0 } > =A0 =A0 else { > =A0 =A0 =A0 =A0 __apxJvmDetach(lpJava); > =A0 =A0 } > =A0finished: > - =A0 =A0lpJava->dwWorkerStatus =3D 0; > - =A0 =A0apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread finished %s:%s= with status=3D%d", > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0lpJava->clWorker.sClazz, lpJava->clWorke= r.sMethod, rv); > - =A0 =A0SetEvent(lpJava->hWorkerSync); > + =A0 =A0if (lpJava) { > + =A0 =A0 =A0 =A0lpJava->dwWorkerStatus =3D 0; > + =A0 =A0 =A0 =A0apxLogWrite(APXLOG_MARK_DEBUG "Java Worker thread finish= ed %s:%s with status=3D%d", > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0lpJava->clWorker.sClazz, lpJava-= >clWorker.sMethod, rv); > + =A0 =A0 =A0 =A0SetEvent(lpJava->hWorkerSync); > + =A0 =A0} > =A0 =A0 ExitThread(rv); > =A0 =A0 /* never gets here but keep the compiler happy */ > - =A0 =A0return 0; > + =A0 =A0return rv; > =A0} > > +BOOL > =A0apxJavaStart(LPAPXJAVA_THREADARGS pArgs) > =A0{ > - > =A0 =A0 LPAPXJAVAVM lpJava; > =A0 =A0 lpJava =3D APXHANDLE_DATA(pArgs->hJava); > + =A0 =A0if (!lpJava) > + =A0 =A0 =A0 =A0return FALSE; > =A0 =A0 lpJava->dwWorkerStatus =3D 0; > =A0 =A0 lpJava->hWorkerSync =A0 =A0=3D CreateEvent(NULL, FALSE, FALSE, NU= LL); > =A0 =A0 lpJava->hWorkerThread =A0=3D CreateThread(NULL, > @@ -936,6 +941,8 @@ apxJavaStart(LPAPXJAVA_THREADARGS pArgs) > =A0 =A0 ResumeThread(lpJava->hWorkerThread); > =A0 =A0 /* Wait until the worker thread initializes */ > =A0 =A0 WaitForSingleObject(lpJava->hWorkerSync, INFINITE); > + =A0 =A0if (lpJava->dwWorkerStatus =3D=3D 0) > + =A0 =A0 =A0 =A0return FALSE; > =A0 =A0 if (lstrcmpA(lpJava->clWorker.sClazz, "java/lang/System")) { > =A0 =A0 =A0 =A0 /* Give some time to initialize the thread > =A0 =A0 =A0 =A0 =A0* Unless we are calling System.exit(0). > > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org For additional commands, e-mail: dev-help@commons.apache.org