//
// Copyright (c) 2021 by the citadel.org team
//
-// This program is open source software. It runs great on the
-// Linux operating system (and probably elsewhere). You can use,
-// copy, and run it under the terms of the GNU General Public
-// License version 3.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
+// This program is open source software. Use, duplication, or disclosure
+// is subject to the terms of the GNU General Public License, version 3.
+// The program is distributed without any warranty, expressed or implied.
#include <stdlib.h>
#include <unistd.h>
what_exited = "unknown";
}
if (who_exited >= 0) {
- if (WIFEXITED(status)) {
- fprintf(stderr, "ctdlvisor: %d (%s) exited, exitcode=%d\n", who_exited, what_exited, WEXITSTATUS(status));
- }
- else if (WIFSIGNALED(status)) {
- fprintf(stderr, "ctdlvisor: %d (%s) crashed, signal=%d\n", who_exited, what_exited, WTERMSIG(status));
- }
- else {
- fprintf(stderr, "ctdlvisor: %d (%s) ended, status=%d\n", who_exited, what_exited, status);
- }
+ fprintf(stderr, "ctdlvisor: %d (%s) ended, status=%d\n", who_exited, what_exited, status);
}
} while (who_exited >= 0);
ctdlvisor_exit(0);
// If it crashes, however, we will start it back up.
if (who_exited == citserver_pid) {
citserver_exit_code = WEXITSTATUS(status);
- if (citserver_exit_code == 0) {
+ if ((WIFEXITED(status)) && (citserver_exit_code == 0)) {
fprintf(stderr, "ctdlvisor: citserver exited normally - ending AppImage session\n");
shutting_down = 1;
kill(webcit_pid, SIGTERM);
kill(webcits_pid, SIGTERM);
}
- else if ((citserver_exit_code >= 101) && (citserver_exit_code <= 109)) {
+ else if ((WIFEXITED(status)) && (citserver_exit_code >= 101) && (citserver_exit_code <= 109)) {
fprintf(stderr, "ctdlvisor: citserver exited intentionally - ending AppImage session\n");
shutting_down = 1;
kill(webcit_pid, SIGTERM);
kill(webcits_pid, SIGTERM);
}
else {
+ if (WIFSIGNALED(status)) {
+ fprintf(stderr, "ctdlvisor: citserver crashed on signal %d\n", WTERMSIG(status));
+ }
citserver_pid = start_citadel();
}
}
fprintf(stderr, "ctdlvisor: waiting a moment for citserver to initialize...\n");
sleep(5);
char bin[1024];
- sprintf(bin, "%s/usr/local/citadel/ctdlmigrate", getenv("APPDIR"));
+ sprintf(bin, "%s/usr/local/citadel/ctdlmigrate -h %s", getenv("APPDIR"), getenv("CTDL_DIR"));
system(bin);
kill(citserver_pid, SIGTERM);
}