endlos loop with segmentation fault

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

endlos loop with segmentation fault

Friedrich Leisch-4
To: [hidden email], ka
Subject: infinite loop with segmentation fault

Bug report for Octave 1.92 configured for i586-unknown-linux

Description:
-----------

it happenend already two times at our department that somebody wanted
to quit octave and got caught in an infinite loop with octave messages
"Segmentation fault ... trying to stop myself" rushing over the screen.

Repeat-By:
---------

sorry, I cannot repeat the bug



Configuration (please do not edit this section):
-----------------------------------------------

uname output:     Linux galadriel 2.0.24 #1 Tue Nov 5 09:49:51 MET 1996 i586
configure opts:   --datadir=/usr/local/lib --libexecdir=/usr/local/lib --disable-shared
Fortran compiler: g77
FFLAGS:           -O
F2C:              
F2CFLAGS:        
FLIBS:            -lf2c -L/usr/lib/gcc-lib/i486-linux/2.7.2 -lgcc
CPPFLAGS:        
INCFLAGS:         -I/usr/local/include -I/usr/local/include/octave-1.92
C compiler:       gcc, version 2.7.2
CFLAGS:           -DHAVE_CONFIG_H -mieee-fp -O
CPICFLAG:         -fPIC
C++ compiler:     c++, version 2.7.2
CXXFLAGS:         -DHAVE_CONFIG_H  -fno-implicit-templates -mieee-fp -O
CXXPICFLAG:       -fPIC
LDFLAGS:          -s
LIBFLAGS:         -L/usr/local/lib
RLD_FLAG:        
CXXLIBS:          -lstdc++ -lm -L/usr/lib/gcc-lib/i486-linux/2.7.2 -lstdc++ -lm -lgcc -lc -lgcc
TERMLIBS:         -lncurses
LIBS:            
LEXLIB:          
LIBPLPLOT:        
LIBDLFCN:        
DEFS:

  -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -DUSE_GNU_INFO=1
  -DUSE_READLINE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4
  -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DF77_APPEND_UNDERSCORE=1
  -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 -DTIME_WITH_SYS_TIME=1
  -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 -DHAVE_CURSES_H=1 -DHAVE_FCNTL_H=1
  -DHAVE_FLOAT_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1 -DHAVE_MEMORY_H=1
  -DHAVE_NAN_H=1 -DHAVE_NCURSES_H=1 -DHAVE_PWD_H=1 -DHAVE_STDLIB_H=1
  -DHAVE_STRING_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_RESOURCE_H=1
  -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1
  -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1 -DHAVE_TERMCAP_H=1
  -DHAVE_TERMIO_H=1 -DHAVE_TERMIOS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_VARARGS_H=1
  -DNPSOL_MISSING=1 -DQPSOL_MISSING=1 -DFSQP_MISSING=1 -DHAVE_ATEXIT=1
  -DHAVE_BCOPY=1 -DHAVE_BZERO=1 -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1
  -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1 -DHAVE_FCNTL=1 -DHAVE_FORK=1
  -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1
  -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1 -DHAVE_GETGRNAM=1 -DHAVE_GETHOSTNAME=1
  -DHAVE_GETPGRP=1 -DHAVE_GETPID=1 -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1
  -DHAVE_GETPWNAM=1 -DHAVE_GETPWUID=1 -DHAVE_GETUID=1 -DHAVE_LSTAT=1
  -DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_ON_EXIT=1
  -DHAVE_PIPE=1 -DHAVE_PUTENV=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1
  -DHAVE_RMDIR=1 -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1
  -DHAVE_SIGACTION=1 -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1
  -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1
  -DHAVE_STRERROR=1 -DHAVE_STRNCASECMP=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1
  -DHAVE_UNLINK=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_WAITPID=1
  -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1 -DHAVE_DLSYM=1 -DHAVE_DLERROR=1
  -DHAVE_DLCLOSE=1 -DWITH_DL=1 -DWITH_DYNAMIC_LINKING=1 -DHAVE_LIBM=1
  -DHAVE_FINITE=1 -DHAVE_ISNAN=1 -DHAVE_ISINF=1 -DHAVE_ACOSH=1
  -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1 -DHAVE_ERFC=1
  -DHAVE_ST_BLKSIZE=1 -DHAVE_ST_BLOCKS=1 -DHAVE_ST_RDEV=1 -DHAVE_TZNAME=1
  -DRETSIGTYPE=void -DSYS_SIGLIST_DECLARED=1 -DHAVE_SYS_SIGLIST=1
  -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1 -DHAVE_TIMES=1
  -DGNUPLOT_HAS_MULTIPLOT=1 -DGNUPLOT_HAS_FRAMES=1

User-preferences (please do not edit this section):
--------------------------------------------------

  EDITOR = "vi"
  IMAGEPATH = ".:/usr/local/lib/octave/1.92/imagelib//"
  INFO_FILE = "/usr/local/info/octave.info"
  LOADPATH = ".:/home/Leisch/work/octave//:/home/Leisch/lib/octave//:.:/usr/local/lib/octave/site/oct/i586-unknown-linux//:/usr/local/lib/octave/site/m//:/usr/local/lib/octave/1.92/oct/i586-unknown-linux//:/usr/local/lib/octave/1.92/m//"
  OCTAVE_VERSION = "1.92"
  PAGER = "less"
  PS1 = "\\s:\\#> "
  PS2 = "> "
  automatic_replot = 0
  whitespace_in_literal_matrix = 0
  default_save_format = "mat-binary"
  do_fortran_indexing = 1
  empty_list_elements_ok = 1
  eps = 2.22045e-16
  gnuplot_binary = "gnuplot"
  ignore_function_time_stamp = "system"
  implicit_str_to_num_ok = 1
  ok_to_lose_imaginary_part = 1
  output_max_field_width = 10
  output_precision = 5
  page_screen_output = 1
  prefer_column_vectors = 0
  prefer_zero_one_indexing = 1
  print_answer_id_name = 1
  print_empty_dimensions = 0
  propagate_empty_matrices = 1
  resize_on_range_error = 1
  return_last_computed_value = 0
  save_precision = 15
  silent_functions = 0
  split_long_rows = 1
  treat_neg_dim_as_zero = 1
  warn_assign_as_truth_value = 1
  warn_comma_in_global_decl = 1
  warn_divide_by_zero = 1

Reply | Threaded
Open this post in threaded view
|

endlos loop with segmentation fault

John W. Eaton-6
On 19-Nov-1996, Friedrich Leisch <[hidden email]> wrote:

: it happenend already two times at our department that somebody wanted
: to quit octave and got caught in an infinite loop with octave messages
: "Segmentation fault ... trying to stop myself" rushing over the screen.

Here's a patch that might be able to prevent the endless loop:

Index: sighandlers.cc
===================================================================
RCS file: /home/jwe/src/master/octave/src/sighandlers.cc,v
retrieving revision 1.44
diff -c -r1.44 sighandlers.cc
*** sighandlers.cc 1996/11/14 08:39:47 1.44
--- sighandlers.cc 1996/11/19 20:30:59
***************
*** 24,30 ****
--- 24,32 ----
  #include <config.h>
  #endif
 
+ #include <cstdlib>
  #include <csignal>
+
  #include <new>
 
  #include <iostream.h>
***************
*** 88,98 ****
  static void
  my_friendly_exit (const char *sig_name, int sig_number)
  {
!   error ("%s -- stopping myself...", sig_name);
 
!   save_user_variables ();
 
!   clean_up_and_exit (sig_number);
  }
 
  // I know, not really a signal handler.
--- 90,117 ----
  static void
  my_friendly_exit (const char *sig_name, int sig_number)
  {
!   static bool been_there_done_that = false;
!
!   if (been_there_done_that)
!     {
! #ifdef SIGABRT
!       octave_set_signal_handler (SIGABRT, SIG_DFL);
! #endif
!
!       error ("attempted clean up seems to have failed -- aborting...");
!
!       abort ();
!     }
!   else
!     {
!       been_there_done_that = true;
!
!       error ("%s -- stopping myself...", sig_name);
 
!       save_user_variables ();
 
!       clean_up_and_exit (sig_number);
!     }
  }
 
  // I know, not really a signal handler.


If you happen to find a way to repeat this, I'd definitely like to be
able to fix the problem that is actually causing the segfault.

Thanks,

jwe