FreeBSD Bugzilla – Attachment 49324 Details for
Bug 75345
JBoss4 update
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 14.04 KB, created by
Jonathan Chen
on 2004-12-21 06:10:28 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Jonathan Chen
Created:
2004-12-21 06:10:28 UTC
Size:
14.04 KB
patch
obsolete
>diff -ruN /usr/ports/java/jboss4/Makefile ./Makefile >--- /usr/ports/java/jboss4/Makefile Tue Dec 21 07:24:57 2004 >+++ ./Makefile Tue Dec 21 18:26:45 2004 >@@ -7,7 +7,7 @@ > > PORTNAME= ${APP_TITLE:L} > PORTVERSION= 4.0.0 >-PORTREVISION= 1 >+PORTREVISION= 2 > CATEGORIES= java > MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} > MASTER_SITE_SUBDIR= ${PORTNAME} >diff -ruN /usr/ports/java/jboss4/files/daemonctl.c ./files/daemonctl.c >--- /usr/ports/java/jboss4/files/daemonctl.c Tue Dec 21 07:24:58 2004 >+++ ./files/daemonctl.c Tue Dec 21 15:45:21 2004 >@@ -27,17 +27,12 @@ > #define TRUE 1 > #define FALSE 0 > >-/* The maximum size of the PID file, in bytes */ >-#define MAX_FILE_SIZE 32 >- > /* The interval in seconds between the checks to make sure the process > died after a kill */ > #define STOP_TIME_INTERVAL 1 > > #define ERR_ILLEGAL_ARGUMENT 1 > #define ERR_PID_FILE_NOT_FOUND 2 >-#define ERR_PID_FILE_TOO_LARGE 3 >-#define ERR_PID_FILE_CONTAINS_ILLEGAL_CHAR 4 > #define ERR_KILL_FAILED 5 > #define ERR_ALREADY_RUNNING 6 > #define ERR_NOT_RUNNING 7 >@@ -56,18 +51,20 @@ > Function declarations. > */ > static void printUsage (void); >-static int openPIDFile (void); >-static int readPID (int); >-static void writePID (int file, int pid); >-static void start (int optcount, char * opts []); >+static int readPID (void); >+static void writePID (int pid); >+static void clearPID (void); >+static void start (int javaOpt, char * javaArgs [], int jbossOpt, char * jbossArgs []); > static void stop (void); >-static void restart (int optcount, char * opts []); >+static void restart (int javaOpt, char * javaArgs [], int jbossOpt, char * jbossArgs []); > static void logOutput (char *); > > /* > Globals > */ > static int isQuiet = FALSE; >+static char * optQuiet = "-q", /* quiet option */ >+ * optConfig = "-config"; /* jboss configuration option */ > > /** > * Main function. This function is called when this program is executed. >@@ -84,10 +81,9 @@ > int argc, > char *argv []) > { >- > /* Declare variables, like all other good ANSI C programs do :) */ >- int i, jopt; >- char *argument, **jargs; >+ int i, javaOpt, jbossOpt; >+ char *argument, **javaArgs, **jbossArgs; > > /* Parse the arguments */ > if (argc < 2) >@@ -101,26 +97,58 @@ > setgid (getegid ()); > > /* >- Build up java-option block. >+ Build up java and jboss option blocks. > */ >- jopt = 0; >+ javaOpt = jbossOpt = 0; > for (i = 1; i < argc; i++) > { >- if (strcmp (argv [i], "-q") == 0) >+ if (strcmp (argv [i], optQuiet) == 0) >+ { > isQuiet = TRUE; >- else if (*argv [i] == '-') >- jopt++; >+ >+ } else if (strcmp (argv [i], optConfig) == 0) >+ { >+ jbossOpt += 2; >+ if (++i >= argc) >+ { >+ printUsage (); >+ return ERR_ILLEGAL_ARGUMENT; >+ } >+ >+ } else if (*argv [i] == '-') >+ { >+ javaOpt++; >+ } >+ } >+ if (javaOpt == 0) >+ javaArgs = NULL; >+ else >+ { >+ int j = 0; >+ javaArgs = malloc (sizeof (char *) * javaOpt); >+ for (i = 0; i < argc; i++) >+ { >+ if (strcmp (argv [i], optQuiet) && >+ strcmp (argv [i], optConfig) && >+ *argv [i] == '-') >+ { >+ javaArgs [j++] = argv [i]; >+ } >+ } > } >- if (jopt == 0) >- jargs = NULL; >+ if (jbossOpt == 0) >+ jbossArgs = NULL; > else > { > int j = 0; >- jargs = malloc (sizeof (char *) * jopt); >+ jbossArgs = malloc (sizeof (char *) * jbossOpt); > for (i = 0; i < argc; i++) > { >- if (strcmp (argv [i], "-q") && *argv [i] == '-') >- jargs [j++] = argv [i]; >+ if (strcmp (argv [i], optConfig) == 0) >+ { >+ jbossArgs [j++] = "-c"; >+ jbossArgs [j++] = argv [++i]; >+ } > } > } > >@@ -130,14 +158,15 @@ > argument = argv [argc - 1]; > if (strcmp ("start", argument) == 0) > { >- start (jopt, jargs); >+ start (javaOpt, javaArgs, jbossOpt, jbossArgs); > > } else if (strcmp ("stop", argument) == 0) > { > stop (); >+ > } else if (strcmp ("restart", argument) == 0) > { >- restart (jopt, jargs); >+ restart (javaOpt, javaArgs, jbossOpt, jbossArgs); > > } else { > fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Illegal argument \"%s\".\n", argument); >@@ -145,134 +174,85 @@ > exit (ERR_ILLEGAL_ARGUMENT); > } > >- return 0; >+ return EXIT_SUCCESS; > } > >- > /** > * Prints usage information to stdout. > */ > static void > printUsage (void) > { >- printf ("Usage: %%CONTROL_SCRIPT_NAME%% [java-options] {start|stop|restart}\n"); >+ printf ("Usage: %%CONTROL_SCRIPT_NAME%% [java-options] [-config jbossconfig] {start|stop|restart}\n"); > } > > /** >- * Attempts to open the PID file. If that file is successfully opened, then >- * the file handle (an int) will be returned. >+ * Reads a PID from the PID file. > * > * @return >- * the file handle. >+ * the PID, or -1 if the file was empty. > */ > static int >-openPIDFile (void) >+readPID (void) > { >+ FILE * file; >+ int pid; > >- int file; >- >- /* Attempt to open the PID file */ >- file = open ("%%PID_FILE%%", O_RDWR); >- if (file < 0) { >+ logOutput (">> Reading PID file (%%PID_FILE%%)..."); >+ file = fopen ("%%PID_FILE%%", "r"); >+ if (!file) >+ { > logOutput (" [ FAILED ]\n"); >- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to open %%PID_FILE%% for reading and writing: "); >- perror (NULL); >+ perror ("%%CONTROL_SCRIPT_NAME%%: Unable to open %%PID_FILE%% for reading: "); > exit (ERR_PID_FILE_NOT_FOUND); > } >+ if (fscanf (file, "%d", &pid) < 1) >+ pid = -1; >+ fclose (file); > >- return file; >-} >- >- >-/** >- * Reads a PID from the specified file. The file is identified by a file >- * handle. >- * >- * @param file >- * the file handle. >- * >- * @return >- * the PID, or -1 if the file was empty. >- */ >-static int >-readPID ( >- int file) >-{ >- >- char *buffer; >- int hadNewline = 0; >- unsigned int count; >- unsigned int i; >- int pid; >- >- /* Read the PID file contents */ >- buffer = (char *) malloc ((MAX_FILE_SIZE + 1) * sizeof (char)); >- count = read (file, buffer, MAX_FILE_SIZE + 1); >- if (count > MAX_FILE_SIZE) { >- logOutput (" [ FAILED ]\n"); >- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: The file %%PID_FILE%% contains more than %d bytes.\n", MAX_FILE_SIZE); >- exit (ERR_PID_FILE_TOO_LARGE); >- } >- >- /* Convert the bytes to a number */ >- pid = 0; >- for (i=0; i<count; i++) { >- char c = buffer[i]; >- if (c >= '0' && c <= '9') { >- char digit = c - '0'; >- pid *= 10; >- pid += digit; >- } else if (i == (count - 1) && c == '\n') { >- /* XXX: Ignore a newline at the end of the file */ >- hadNewline = 1; >- } else { >- logOutput (" [ FAILED ]\n"); >- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: The file %%PID_FILE%% contains an illegal character (%d) at position %d.\n", c, i); >- exit (ERR_PID_FILE_CONTAINS_ILLEGAL_CHAR); >- } >- } > logOutput (" [ DONE ]\n"); >- >- if (count == 0 || (count == 1 && hadNewline == 1)) { >- return -1; >- } >- > return pid; > } > >- > /** > * Writes a process ID to the specified file. The file is identified by a file > * handle. > * >- * @param file >- * the file handle, always greater than 0. >- * > * @param pid > * the PID to store, always greater than 0. > */ > static void > writePID ( >- int file, > int pid) > { >- >- char *buffer; >- int nbytes; >- >- /* Check preconditions */ >- assert (file > 0); >- assert (pid > 0); >+ FILE * file; > > logOutput (">> Writing PID file..."); >+ file = fopen ("%%PID_FILE%%", "w"); >+ if (!file) >+ { >+ logOutput (" [ FAILED ]\n"); >+ perror ("%%CONTROL_SCRIPT_NAME%%: Unable to open %%PID_FILE%% for writing: "); >+ exit (ERR_PID_FILE_NOT_FOUND); >+ } >+ fprintf (file, "%d\n", pid); >+ fclose (file); > >- lseek (file, (off_t) 0, SEEK_SET); >- ftruncate (file, (off_t) 0); >- nbytes = asprintf (&buffer, "%d\n", pid); >- write (file, buffer, nbytes); > logOutput (" [ DONE ]\n"); > } > >+/** >+ Truncate the PID file. >+ */ >+static void >+clearPID (void) >+{ >+ if (truncate ("%%PID_FILE%%", 0) != 0) >+ { >+ perror ("%%CONTROL_SCRIPT_NAME%%: Unable to clear %%PID_FILE%%: "); >+ exit (ERR_PID_FILE_NOT_FOUND); >+ } >+} > > /** > * Checks if the specified process is running. >@@ -287,7 +267,6 @@ > existsProcess ( > int pid) > { >- > int result; > > /* Check preconditions */ >@@ -297,14 +276,9 @@ > result = kill (pid, 0); > > /* If the result is 0, then the process exists */ >- if (result == 0) { >- return 1; >- } else { >- return 0; >- } >+ return result == 0; > } > >- > /** > * Kills the process identified by the specified ID. > * >@@ -315,7 +289,6 @@ > killProcess ( > int pid) > { >- > int result; > unsigned int waited; > unsigned int forced; >@@ -347,13 +320,13 @@ > > /* If the process still exists, then have no mercy and kill it */ > forced = 0; >- if (result == 1) { >- >+ if (result == 1) >+ { > /* Force the process to die */ > result = kill (pid, SIGKILL); > if (result == 0) { > forced = 1; >- logOutput (" [ DONE ]\n"); >+ logOutput (" [ KILLED ]\n"); > fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Process %d did not terminate within %%STOP_TIMEOUT%% sec. Killed.\n", pid); > } else if (result != ESRCH) { > logOutput (" [ FAILED ]\n"); >@@ -373,27 +346,28 @@ > */ > static void > start ( >- int optcount, >- char * opts []) >+ int javaOpt, >+ char * javaArgs [], >+ int jbossOpt, >+ char * jbossArgs []) > { >- int file; >+ int i, argc; >+ char ** argv; > int pid; > int result; > int stdoutLogFile; > int stderrLogFile; > struct stat sb; > >- /* Open and read the PID file */ >- logOutput (">> Reading PID file (%%PID_FILE%%)..."); >- file = openPIDFile (); >- pid = readPID (file); >+ pid = readPID (); > > logOutput (">> Starting %%APP_TITLE%% %%PORTVERSION%%..."); >- if (pid != -1) { >- >+ if (pid != -1) >+ { > /* Check if the process actually exists */ > result = existsProcess (pid); >- if (result == 1) { >+ if (result == 1) >+ { > logOutput (" [ FAILED ]\n"); > fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: %%APP_TITLE%% %%PORTVERSION%% is already running, PID is %d.\n", pid); > exit (ERR_ALREADY_RUNNING); >@@ -474,19 +448,16 @@ > lseek (stderrLogFile, (off_t) 0, SEEK_END); > > /* Split this process in two */ >- pid = fork (); >- if (pid == -1) { >+ switch (pid = fork ()) >+ { >+ case -1: > logOutput (" [ FAILED ]\n"); > fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to fork: "); > perror (NULL); > exit (ERR_FORK_FAILED); >- } >- >- if (pid == 0) >- { >- int i, argc; >- char **argv; >+ break; > >+ case 0: > /* Redirect stdout to log file */ > dup2 (stdoutLogFile, STDOUT_FILENO); > >@@ -494,29 +465,31 @@ > dup2 (stderrLogFile, STDERR_FILENO); > > /* TODO: Support redirection of both stdout and stderr to the same >- file using pipe (2) */ >+ file using pipe (2) */ > > /* >- Build the argument vector, with the java-options if any. >+ Build the argument vector, with the java/jboss options if any. > */ >- argv = malloc (sizeof (char *) * (optcount + 5)); >+ argv = malloc (sizeof (char *) * (javaOpt + jbossOpt + 5)); > argc = 0; > argv [argc++] = "%%JAVA%%"; >- for (i = 0; i < optcount; i++) >- argv [argc++] = opts [i]; >+ for (i = 0; i < javaOpt; i++) >+ argv [argc++] = javaArgs [i]; > argv [argc++] = "-cp"; > argv [argc++] = "%%JAVA_CP%%"; > argv [argc++] = "%%JAVA_MAIN%%"; >+ for (i = 0; i < jbossOpt; i++) >+ argv [argc++] = jbossArgs [i]; > argv [argc++] = NULL; > > /* Execute the command */ > execv (argv [0], argv); >- > perror (NULL); >- } else >- { >+ break; >+ >+ default: > logOutput (" [ DONE ]\n"); >- writePID (file, pid); >+ writePID (pid); > } > } > >@@ -526,28 +499,26 @@ > static void > stop (void) > { >- >- int file; > int pid; > >- /* Open and read the PID file */ >- logOutput (">> Reading PID file (%%PID_FILE%%)..."); >- file = openPIDFile (); >- pid = readPID (file); >+ pid = readPID (); > > logOutput (">> Checking if %%APP_TITLE%% %%PORTVERSION%% is running..."); > > /* If there is a PID, see if the process still exists */ >- if (pid != -1) { >+ if (pid != -1) >+ { > int result = kill (pid, 0); >- if (result != 0 && errno == ESRCH) { >- ftruncate (file, (off_t) 0); >+ if (result != 0 && errno == ESRCH) >+ { >+ clearPID (); > pid = -1; > } > } > > /* If there is no running process, produce an error */ >- if (pid == -1) { >+ if (pid == -1) >+ { > logOutput (" [ FAILED ]\n"); > fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: %%APP_TITLE%% %%PORTVERSION%% is currently not running.\n"); > exit (ERR_NOT_RUNNING); >@@ -556,9 +527,7 @@ > > /* Terminate the process */ > killProcess (pid); >- >- /* Clear the PID file */ >- ftruncate (file, (off_t) 0); >+ clearPID (); > } > > >@@ -567,11 +536,13 @@ > */ > static void > restart ( >- int optcount, >- char * opts []) >+ int javaOpt, >+ char * javaArgs [], >+ int jbossOpt, >+ char * jbossArgs []) > { > stop (); >- start (optcount, opts); >+ start (javaOpt, javaArgs, jbossOpt, jbossArgs); > } > > /** >diff -ruN /usr/ports/java/jboss4/files/startup.sh ./files/startup.sh >--- /usr/ports/java/jboss4/files/startup.sh Tue Dec 21 07:24:58 2004 >+++ ./files/startup.sh Tue Dec 21 15:27:10 2004 >@@ -1,6 +1,4 @@ > #!/bin/sh >-# -*- mode: Fundamental; tab-width: 4; -*- >-# ex:ts=4 > # > # %%APP_TITLE%% startup script. > # >@@ -15,6 +13,8 @@ > # Set it to "YES" to enable %%APP_SHORTNAME%% > # %%APP_SHORTNAME%%_flags (str): Set to "-server" by default. > # Extra JVM flags. >+# %%APP_SHORTNAME%%_config (str): Set to "" by default >+# JBoss server config, eg {all|default|minimal|standard} > # > . %%RC_SUBR%% > >@@ -28,19 +28,31 @@ > > [ -z "$%%APP_SHORTNAME%%_enable" ] && %%APP_SHORTNAME%%_enable="NO" > [ -z "$%%APP_SHORTNAME%%_flags" ] && %%APP_SHORTNAME%%_flags="-server" >+[ -z "$%%APP_SHORTNAME%%_config" ] && %%APP_SHORTNAME%%_config="" > > %%APP_SHORTNAME%%_start () > { > checkyesno %%APP_SHORTNAME%%_enable && >- %%CONTROL_SCRIPT%% -q ${%%APP_SHORTNAME%%_flags} start && >+ { >+ if [ ! -f ${pidfile} ] >+ then >+ touch ${pidfile} >+ chown %%USER%%:%%GROUP%% ${pidfile} >+ fi >+ >+ %%CONTROL_SCRIPT%% -q ${%%APP_SHORTNAME%%_flags} ${%%APP_SHORTNAME%%_configflag} ${%%APP_SHORTNAME%%_config} start && > echo -n " %%APP_SHORTNAME%%" >+ } > } > > %%APP_SHORTNAME%%_restart () > { > checkyesno %%APP_SHORTNAME%%_enable && >- %%CONTROL_SCRIPT%% -q ${%%APP_SHORTNAME%%_flags} restart >+ %%CONTROL_SCRIPT%% -q ${%%APP_SHORTNAME%%_flags} ${%%APP_SHORTNAME%%_configflag} ${%%APP_SHORTNAME%%_config} restart > } > > load_rc_config $name >+ >+[ -n "${%%APP_SHORTNAME%%_config}" ] && %%APP_SHORTNAME%%_configflag="-config" >+ > run_rc_command "$1" >diff -ruN /usr/ports/java/jboss4/pkg-message ./pkg-message >--- /usr/ports/java/jboss4/pkg-message Thu Jan 1 12:00:00 1970 >+++ ./pkg-message Tue Dec 21 12:21:50 2004 >@@ -0,0 +1,2 @@ >+To run the JBoss4 server from startup, add jboss4_enable="YES" >+in your /etc/rc.conf. Extra options can be found in startup script.
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 75345
: 49324