[Initng-svn] r3690 - initng/trunk/src
svn at initng.thinktux.net
svn at initng.thinktux.net
Wed Apr 5 22:28:24 CEST 2006
Author: jimmy
Date: Wed Apr 5 22:28:22 2006
New Revision: 3690
Modified:
initng/trunk/src/initng_main.c
Log:
make initng_segfault to try harder to tell the user something failed.
Modified: initng/trunk/src/initng_main.c
==============================================================================
--- initng/trunk/src/initng_main.c (original)
+++ initng/trunk/src/initng_main.c Wed Apr 5 22:28:22 2006
@@ -413,7 +413,11 @@
*/
void initng_main_segfault(void)
{
-
+ int i = 0;
+ /* open a direct socket to /dev/console */
+ int emergency_output = -1;
+
+
/* if this is not init */
if (!g.i_am_init)
{
@@ -422,23 +426,58 @@
}
#ifdef DEBUG
+#define MESSAGE "Initng segfaulted, will wait in 20 seconds for you to start a gdb, before execve(/sbin/initng-segfault);\n"
/* if we compiled debug mode, we get the user 20 seconds to fire up gdb, and attach pid 1 */
- printf("Initng segfaulted, will wait in 20 seconds for you to start a gdb, before execve(/sbin/initng-segfault);\n");
- sleep(20);
+ while(i<6)
+ {
+ emergency_output = open("/dev/console", O_WRONLY);
+ if(emergency_output>0)
+ {
+ write(emergency_output, MESSAGE, sizeof(char) * strlen(MESSAGE));
+ close(emergency_output);
+ }
+ sleep(4);
+ i++;
+ }
#endif
- printf("Launching /sbin/initng-segfault, this is pid: %i\n", getpid());
+#define LMESSAGE "Launching /sbin/initng-segfault"
+ emergency_output = open("/dev/console", O_WRONLY);
+ if(emergency_output > 0)
+ {
+ write(emergency_output, LMESSAGE, sizeof(char) * strlen(LMESSAGE));
+ close(emergency_output);
+ }
+
+ /* launch initng-segfault */
{
const char *segfault_argv[] = { "/sbin/initng-segfault", NULL };
+ const char *segfault_argv_initng[] = { "/sbin/initng", "--hot_reload", NULL };
const char *segfault_env[] = { NULL };
+ /* first try /sbin/initng-segfault */
if (execve
((char *) segfault_argv[0], (char **) segfault_argv,
(char **) segfault_env) == -1)
{
- printf("/sbin/initng-segfault did not exist, will die!\n");
+ /* then try /sbin/initng --hot_reload */
+ if (execve
+ ((char *) segfault_argv_initng[0], (char **) segfault_argv,
+ (char **) segfault_env) == -1)
+
+ {
+ /* else tell the user, it dont succeded to start a replacement */
+ fprintf(stderr, "/sbin/initng-segfault did not exist, will die!\n");
+ }
}
- _exit(99);
+
+ }
+
+ /* Looop forever ever, becouse init cant die */
+ while(1)
+ {
+ sleep(10);
+ fprintf(stderr, "INITNG_SEGFAULT\n");
}
}
More information about the Initng-svn
mailing list