ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/utils.C
(Generate patch)

Comparing deliantra/server/common/utils.C (file contents):
Revision 1.78 by root, Fri May 16 17:09:38 2008 UTC vs.
Revision 1.82 by root, Thu Sep 11 12:43:17 2008 UTC

33#include <signal.h> 33#include <signal.h>
34 34
35#include <global.h> 35#include <global.h>
36#include <material.h> 36#include <material.h>
37 37
38#include <sys/time.h>
39#include <sys/resource.h>
40
38#include <glib.h> 41#include <glib.h>
39 42
40refcnt_base::refcnt_t refcnt_dummy; 43refcnt_base::refcnt_t refcnt_dummy;
41ssize_t slice_alloc; 44ssize_t slice_alloc;
42rand_gen rndm, rmg_rndm; 45rand_gen rndm, rmg_rndm;
446void 449void
447fork_abort (const char *msg) 450fork_abort (const char *msg)
448{ 451{
449 if (!fork ()) 452 if (!fork ())
450 { 453 {
454 signal (SIGINT , SIG_IGN);
455 signal (SIGTERM, SIG_IGN);
451 signal (SIGABRT, SIG_DFL); 456 signal (SIGABRT, SIG_IGN);
457
458 signal (SIGSEGV, SIG_DFL);
459 signal (SIGBUS , SIG_DFL);
460 signal (SIGILL , SIG_DFL);
461 signal (SIGTRAP, SIG_DFL);
462
452 // try to put corefiles into a subdirectory, if existing, to allow 463 // try to put corefiles into a subdirectory, if existing, to allow
453 // an administrator to reduce the I/O load. 464 // an administrator to reduce the I/O load.
454 chdir ("cores"); 465 chdir ("cores");
466
467 // try to detach us from as many external dependencies as possible
468 // as coredumping can take time by closing all fd's.
469 {
470 struct rlimit lim;
471
472 if (getrlimit (RLIMIT_NOFILE, &lim))
473 lim.rlim_cur = 1024;
474
475 for (int i = 0; i < lim.rlim_cur; ++i)
476 close (i);
477 }
478
479 {
480 sigset_t empty;
481 sigemptyset (&empty);
482 sigprocmask (SIG_SETMASK, &empty, 0);
483 }
484
485 // try to coredump with SIGTRAP
486 kill (getpid (), SIGTRAP);
455 abort (); 487 abort ();
456 } 488 }
457 489
458 LOG (llevError, "fork abort: %s\n", msg); 490 LOG (llevError, "fork abort: %s\n", msg);
459} 491}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines