--- freem/src/mumps.c 2025/04/01 20:11:46 1.10 +++ freem/src/mumps.c 2025/04/02 03:26:22 1.13 @@ -1,5 +1,5 @@ /* - * $Id: mumps.c,v 1.10 2025/04/01 20:11:46 snw Exp $ + * $Id: mumps.c,v 1.13 2025/04/02 03:26:22 snw Exp $ * main module of freem * * @@ -24,6 +24,15 @@ * along with FreeM. If not, see . * * $Log: mumps.c,v $ + * Revision 1.13 2025/04/02 03:26:22 snw + * Don't corrupt the terminal if FreeM runs before fmadm configure has been run + * + * Revision 1.12 2025/04/02 02:16:27 snw + * Add fmadm status environment command and move journals to a better location + * + * Revision 1.11 2025/04/01 23:21:45 snw + * fmadm commands for stopping, starting, and restarting environments now functional + * * Revision 1.10 2025/04/01 20:11:46 snw * Further work on fmadm * @@ -106,6 +115,8 @@ int main (int argc, char **argv, char ** int option_index = 0; + char fm_initialized = FALSE; + char dx_mcode[512]; char startup_routine[256]; short routine_mode; @@ -562,11 +573,6 @@ int main (int argc, char **argv, char ** m_log (1, "failure switching UIDs"); exit (1); } - if (chdir (d_user->pw_dir) == -1) { - fprintf (stderr, "freem: chdir failure\n"); - m_log (1, "failure in chdir"); - exit (1); - } } } @@ -585,11 +591,11 @@ int main (int argc, char **argv, char ** char pidfile_buf[256]; int errsav; + pid_file_path = (char *) malloc (PATH_MAX * sizeof (char)); + NULLPTRCHK(pid_file_path,"main"); + snprintf (pid_file_path, PATH_MAX - 1, "%s/freem/run/%s.pid", LOCALSTATEDIR, shm_env); - printf (pid_file_path); - m_log (1, pid_file_path); - pid_fd = open (pid_file_path, O_RDWR | O_CREAT, 0640); errsav = errno; @@ -609,7 +615,6 @@ int main (int argc, char **argv, char ** sprintf (pidfile_buf, "%ld\n", (long) getpid ()); write (pid_fd, pidfile_buf, strlen (pidfile_buf)); - close (pid_fd); } @@ -647,7 +652,10 @@ int main (int argc, char **argv, char ** exit (1); - } + } + else { + fm_initialized = TRUE; + } direct_mode = FALSE; @@ -714,10 +722,11 @@ int main (int argc, char **argv, char ** } - + if (!file_exists (config_file)) { - set_io (UNIX); + if (fm_initialized == TRUE) set_io (UNIX); + fprintf (stderr, "\nFreeM has not been configured. Please run 'fmadm configure'.\n\n\n\n"); exit (2); @@ -727,14 +736,15 @@ int main (int argc, char **argv, char ** if (!skip_init) { /* initialize FreeM environment */ strncpy (nsnbuf, nsname, 255); - if (init (nsnbuf) == FALSE) { - + if (init (nsnbuf) == FALSE) { set_io (UNIX); fprintf (stderr, "\nError initializing FreeM.\n"); exit (1); - } + else { + fm_initialized = TRUE; + } } if (first_process == TRUE) { @@ -816,6 +826,7 @@ int main (int argc, char **argv, char ** fprintf (stderr, "freem: terminating\r\n"); cleanup (); + exit (0); } @@ -942,7 +953,6 @@ void freem_usage(void) fprintf (stdout, "\t-x \n\t\texecute M code on startup\n\n"); fprintf (stdout, "\t-d\n\t\trun the FreeM daemon (one and only one FreeM daemon must always be running)\n\n"); fprintf (stdout, "\t-k\n\t\trun the FreeM daemon in foreground (requires --daemon)\n\n"); - fprintf (stdout, "\t-p \n\t\tuse to record the PID of the FreeM daemon\n\n\n"); fprintf (stdout, "\t-S \n\t\tsets the size of the shared memory segment where FreeM stores the job table, lock table, and IPC table.\n"); #endif fprintf (stdout, "\t\t - Each concurrent job takes %d bytes (1 page) of shared memory\n", PG_SIZE);