diff --git a/src/error.c b/src/error.c index 219764986a422d30c8ded8767c87b0296591cd8d..833e92fff0fc598b4cfb5810aa12aa154bcf0f2f 100644 --- a/src/error.c +++ b/src/error.c @@ -2,7 +2,7 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: error.c,v 1.159 2008/05/27 17:37:33 grubba Exp $ +|| $Id: error.c,v 1.160 2008/05/27 18:50:44 mast Exp $ */ #define NO_PIKE_SHORTHAND @@ -960,13 +960,19 @@ static void f_error_create(INT32 args) /* This prepares the passed object o, which is assumed to inherit * generic_error_program, and throws it: + * * o A backtrace is assigned to error_backtrace. + * * o If func is specified, a frame is constructed for at the end of * backtrace using it as function name and base_sp[0..args-1] as * arguments. + * * o If fmt is specified, an error message is created from it and * fmt_args using string_builder_vsprintf. (fmt_args is passed as a * va_list pointer to be able to pass NULL if fmt is NULL.) + * + * Note: error_message and error_backtrace are not freed before being + * assigned. */ PMOD_EXPORT DECLSPEC(noreturn) void generic_error_va( struct object *o, const char *func, const struct svalue *base_sp, int args, @@ -999,7 +1005,6 @@ PMOD_EXPORT DECLSPEC(noreturn) void generic_error_va( } #endif - if (err->error_message) free_string (err->error_message); err->error_message = finish_string_builder(&s); } @@ -1022,7 +1027,6 @@ PMOD_EXPORT DECLSPEC(noreturn) void generic_error_va( if(Pike_sp[-1].type!=PIKE_T_ARRAY) Pike_fatal("f_backtrace failed to generate a backtrace!\n"); - if (err->error_backtrace) free_array (err->error_backtrace); err->error_backtrace=Pike_sp[-1].u.array; Pike_sp--; dmalloc_touch_svalue(Pike_sp);