Branch: Tag:

2004-03-22

2004-03-22 17:42:07 by Martin Stjernholm <mast@lysator.liu.se>

Improved error reporting from load_module and convert dlopen errors to
warnings. This to treat dynamic modules in the dist as nonexisting if they
fail to load due to nonexisting libs on the running system.

Rev: lib/master.pike.in:1.337
Rev: src/dynamic_load.c:1.79
Rev: src/errors.h:1.25

6:   // Pike is distributed under GPL, LGPL and MPL. See the file COPYING   // for more information.   // - // $Id: master.pike.in,v 1.336 2004/03/15 13:04:55 mast Exp $ + // $Id: master.pike.in,v 1.337 2004/03/22 17:42:06 mast Exp $      #pike __REAL_VERSION__   //#pragma strict_types
820:    DEC_RESOLV_MSG_DEPTH();    resolv_debug ("low_findprog %s: compilation ok\n", fname);    break; +    #if constant(load_module)    case ".so":    if (fname == "") { -  werror( "low_findprog(\"%s\", \"%s\") => load_module(\"\")\n" +  werror( "low_findprog(%O, %O) => load_module(\"\")\n"    "%s\n", pname, ext, describe_backtrace(backtrace()) );    }   
832:    resolv_debug ("low_findprog %s: failed to load binary\n", fname);    objects[ret] = no_value;    ret=programs[fname]=0; // Negative cache. +  if (objectp (err) && err->is_dlopen_error) +  // Do not treat errors from dlopen(3) as exceptions since in +  // a dist we can have .so files that are dynamically linked +  // against libraries that don't exist on the system, and in +  // that case we should just treat the module as nonexisting. +  // +  // What we really want is to do this only for errors that +  // are due to nonexisting files, but the error reporting +  // from dlerror(3) doesn't allow us to tell those from other +  // errors. +  call_compile_warning (handler, fname, +  "Failed to load library: %s\n", err->__dlerror); +  else    compile_cb_rethrow (err);    } -  +  else    resolv_debug ("low_findprog %s: loaded binary\n", fname);   #endif /* load_module */    }