|
***One ref found. -> from object 0x18f6f2b0 offset 189096 **In variable _father **In storage for inherit 0 **Block: 0x18f6f2b0 Type: object Refs: 4 **Parent identifier: 8 **Program id: 66102 **Object variables: ** rtt: mixed name: _disabled off: 352 value: 0 ** rtt: mixed name: _init_disabled off: 368 value: 0 ** rtt: PIKE_T_GET_SET name: disabled off: -65406 value: /hom e/peterpan/Pike-v7.8.352-spearpatched/src/svalue.c:2048: Fatal error: Invalid type 32 in svalue at 0x7fff5358f180. Pike was in GC stage -1 when this fatal occured. pike version is Pike v7.8 release 352 & nbsp; I looked into the source, and saw the following: #define IS_INVALID_TYPE(T) \ ((T > MAX_TYPE && T < T_OBJ_INDEX && T != T_VOID) || T > T_ARRAY_LVALUE) When T==PIKE_T_GET_SET (the value is 32), IS_INVALID_TYPE(T) returned true and debug_svalue_type_error was called that cause fatal error. Guo Xuesong |
|
On Sun, 1 Jan 2012, ¹ùÑ©ËÉ wrote:
> ***One ref found. -> from object 0x18f6f2b0 offset 189096 [...] > Invalid type 32 in svalue at 0x7fff5358f180. > Pike was in GC stage -1 when this fatal occured. Fatals are never good. > pike version is Pike v7.8 release 352 > > I looked into the source, and saw the following: > > #define IS_INVALID_TYPE(T) \ > ((T > MAX_TYPE && T < T_OBJ_INDEX && T != T_VOID) || T > T_ARRAY_LVALUE) > > When T==PIKE_T_GET_SET (the value is 32), IS_INVALID_TYPE(T) returned > true and debug_svalue_type_error was called that cause fatal error. Yes, but check_svalue_type() should typically not be called with PIKE_T_GET_SET svalues to begin with, so the bug is probably somewhere else. Unfortunately I'm not able to reproduce the error with a trivial testcase, so I would appreciate if you could provide one. > Guo Xuesong Thanks, and a happy new year. -- Henrik Grubbström [hidden email] Roxen Internet Software AB |
|
this testcase should work:
class B{ } class A{ object p; mixed `foo() { } } void main() { object b=B(); object a=A(); a->p=b; Debug.locate_references(b); } locate_references will print: ... ** rtt: PIKE_T_GET_SET name: foo off: -65534 value: ... When it try to print the value of foo, pike crashed. Guo Xuesong
> Date: Sun, 1 Jan 2012 15:55:55 +0100 > From: [hidden email] > To: [hidden email] > CC: [hidden email] > Subject: Re: Debug.locate_references(ob) failed when ob has a getter or setter > > On Sun, 1 Jan 2012, ¹ùÑ©ËÉ wrote: > > > ***One ref found. -> from object 0x18f6f2b0 offset 189096 > [...] > > Invalid type 32 in svalue at 0x7fff5358f180. > > Pike was in GC stage -1 when this fatal occured. > > Fatals are never good. > > > pike version is Pike v7.8 release 352 > > > > I looked into the source, and saw the following: > > > > #define IS_INVALID_TYPE(T) \ > > ((T > MAX_TYPE && T < T_OBJ_INDEX && T != T_VOID) || T > T_ARRAY_LVALUE) > > > > When T==PIKE_T_GET_SET (the value is 32), IS_INVALID_TYPE(T) returned > > true and debug_svalue_type_error was called that cause fatal error. > > Yes, but check_svalue_type() should typically not be called with > PIKE_T_GET_SET svalues to begin with, so the bug is probably > somewhere else. > > Unfortunately I'm not able to reproduce the error with a trivial testcase, > so I would appreciate if you could provide one. > > > Guo Xuesong > > Thanks, and a happy new year. > > -- > Henrik Grubbström [hidden email] > Roxen Internet Software AB |
|
On Mon, 2 Jan 2012, wrote:
> this testcase should work: [...] Thanks, now I could reproduce the problem. > locate_references will print: > > ... > ** rtt: PIKE_T_GET_SET name: foo off: -65534 value: ... > > When it try to print the value of foo, pike crashed. The bug seems to have been fixed in gc.c:1.340: commit 9e9e5b3dc6496ab1a69f6b40f787e43716e1f6a7 Author: Martin Stjernholm <[hidden email]> Date: Mon Dec 14 00:22:34 2009 +0100 Fixed support for externs, getters and setters in low_describe_something. Rev: src/gc.c:1.340 ie Fixed in Pike 7.8.384 and later. > Guo Xuesong Thanks, -- Henrik Grubbström [hidden email] Roxen Internet Software AB |
| Powered by Nabble | See how NAML generates this page |
