View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000517 | LDMud 3.3 | Runtime | public | 2007-09-19 13:10 | 2018-01-29 21:57 |
Reporter | zesstra | Assigned To | |||
Priority | normal | Severity | crash | Reproducibility | sometimes |
Status | resolved | Resolution | fixed | ||
Product Version | 3.3 | ||||
Fixed in Version | 3.3.716 | ||||
Summary | 0000517: Crash in remove_mapping() | ||||
Description | Morgengrauen crashed this afternoon after a nice long uptime with 3.3.714. ;-) The crash occured in remove_mapping() in mapping.c:1401 by calling fatal() ("Mapping entry didn't hash to the same spot.") find_map_entry() found an entry in the hash part (searching the hash of the given map_index), but remove_mapping() itself wasn't able to find it using the hash of 'entry' (returned from find_map_entry). LPC-Stacktrace was: 2007.09.19 15:54:20 Mapping entry didn't hash to the same spot. 2007.09.19 15:54:20 Current object was players/nibel/demon/master/dmaster 2007.09.19 15:54:20 Dump of the call chain: ' ParseLine' in ' obj/tools/MGtool.c' ('obj/tools/MGtool#5887724') line 1509 ' CallFunc' in ' obj/tools/MGtool.c' ('obj/tools/MGtool#5887724') line 1617 ' Xcall' in 'obj/tools/MGtool.c (/obj/tools/MGtool/toolcmd.c)' ('obj/tools/MGtool #5887724') line 63 ' CATCH' in ('obj/tools/MGtool#5887724') ' eval' in 'players/nibel/.tool.lpc.c' ('players/nibel/.tool.lpc') line 8 ' StopPhase5' in 'players/nibel/demon/master/dmaster.c' ('players/nibel/demon/master/dmaster') line 315 StopPhase5() was this code snippet: public int StopPhase5() { if(!Sec()) return -1; while(remove_call_out(#'TimerPhase5A) != -1); while(remove_call_out(#'TimerPhase5B) != -1); filter_objects(m_indices(npcs["worm"] - ([0])), "die"); npcs["worm"] = ([]); return ShoutPlane("Der Strom neuer Wuermer versiegt.\n"),1; } Of course, this subtraction of ([0]) is in case of mappings not necessary to remove destructed object(key)s, but it should crash either. I can reproduce that crash. remove_mapping() crashes sometimes, if you have a mapping with objects as Keys, destruct an object and subtract ([0]) from the mapping (see steps to reproduce). I am not yet certain, what exactly happens, but hopefully I am able to look into the details soon. | ||||
Steps To Reproduce | Create the following program and load it. Call Stop() until it crashes, e.g. xdo 50#xcall test->Stop(). Repeat if necessary, in rare cases it does not crash in my homemud. mapping m=([]); void create() { seteuid(getuid()); foreach(int i: 20) { object ob=clone_object("/obj/seil"); ob->move("/room/void",M_NOCHECK); m+=([ob:"bla"]); } } public int Stop() { object *ind; ind=m_indices(m); destruct(ind[random(sizeof(ind))]); m = m - ([0]); return 1; } | ||||
Additional Information | Stack trace: #0 fatal (fmt=0x810cb58 "Mapping entry didn't hash to the same spot.\n") at simulate.c:586 0000001 0x080b3c54 in remove_mapping (m=0x207ccf34, map_index=<value optimized out>) at mapping.c:1401 0000002 0x080b28dd in walk_mapping (m=0x16e11bb0, func=0x80b3ca0 <sub_from_mapping_filter>, extra=0x207ccf34) at mapping.c:1971 0000003 0x080b3533 in subtract_mapping (minuend=0x207ccf34, subtrahend=0x16e11bb0) at mapping.c:3422 0000004 0x08095c5b in eval_instruction (first_instruction=0x208904b2 "an\002", initial_sp=0x813eec0) at interpret.c:10247 0000005 0x080a1ea1 in apply_low (fun=0x11e9723c, ob=0x1ac5c570, num_arg=0, b_ign_prot=0, allowRefs=0) at interpret.c:16811 0000006 0x080a280a in int_apply (fun=0x11e9723c, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 0000007 0x0808fe88 in eval_instruction (first_instruction=0x2242d66e "a\036", initial_sp=0x813eea8) at interpret.c:16159 0000008 0x080a1ea1 in apply_low (fun=0x967150c, ob=0xb5b26bc, num_arg=3, b_ign_prot=0, allowRefs=0) at interpret.c:16811 0000009 0x080a280a in int_apply (fun=0x967150c, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 0000010 0x0808fe88 in eval_instruction (first_instruction=0x28261e63 "a\036\001\n>\036\002\b\003a\b\003\a\020b»b{\f(´b{\a)\002\f{\n)\036\aj\017a\n=\036\a\020K*nx", initial_sp=0x813ee78) at interpret.c:16159 0000011 0x080e7350 in catch_instruction (flags=0, offset=21, i_sp=0x81b4c04, i_pc=0x28261e63 "a\036\001\n>\036\002\b\003a\b\003\a\020b»b{\f(´b{\a)\002\f{\n)\036\aj\017a\n=\036\a\020K*nx", i_fp=0x813ee10, reserve_cost=4000, i_context=0x0) at simulate.c:447 0000012 0x0808bf35 in eval_instruction (first_instruction=0x28261d3a "`\001\fanN", initial_sp=0x813ee70) at interpret.c:9381 0000013 0x080a1ea1 in apply_low (fun=0xa21bc70, ob=0x1350ed60, num_arg=1, b_ign_prot=0, allowRefs=0) at interpret.c:16811 #14 0x080a280a in int_apply (fun=0xa21bc70, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 #15 0x0808fe88 in eval_instruction (first_instruction=0x282676be "`\001\003a\ff\036", initial_sp=0x813edd0) at interpret.c:16159 #16 0x080a1ea1 in apply_low (fun=0xa20bc38, ob=0x1350ed60, num_arg=1, b_ign_prot=0, allowRefs=0) at interpret.c:16811 #17 0x080a280a in int_apply (fun=0xa20bc38, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 #18 0x080a4799 in sapply_int (fun=0xa20bc38, ob=0x1350ed60, num_arg=1, b_find_static=0, b_use_default=1) at interpret.c:17050 #19 0x0804bca9 in parse_command (buff=0xbf8cad66 "xcall dmaster->stopphase5()", from_efun=0) at actions.c:1098 #20 0x0804ddaf in execute_command (str=0xbf8cad66 "xcall dmaster->stopphase5()", ob=0xe79bb10) at actions.c:1258 #21 0x08054612 in backend () at backend.c:671 #22 0x080b2435 in main (argc=Cannot access memory at address 0x0 ) at main.c:615 I will attach the full stacktrace. A core dump is available, but I had only time for a short glance yet. | ||||
Tags | No tags attached. | ||||
Attached Files | stack (9,525 bytes)
#0 fatal (fmt=0x810cb58 "Mapping entry didn't hash to the same spot.\n") at simulate.c:586 va = 0xbf8c8ff4 "" ts = <value optimized out> #1 0x080b3c54 in remove_mapping (m=0x207ccf34, map_index=<value optimized out>) at mapping.c:1401 mc2 = (map_chain_t *) 0x1 idx = 7 key_ix = -1 entry = <value optimized out> mc = (map_chain_t *) 0x288775a0 hm = <value optimized out> num_values = <value optimized out> #2 0x080b28dd in walk_mapping (m=0x16e11bb0, func=0x80b3ca0 <sub_from_mapping_filter>, extra=0x207ccf34) at mapping.c:1971 next = (map_chain_t *) 0x0 mc = (map_chain_t *) 0x0 size = 0 cm = (mapping_cond_t *) 0x0 hm = (mapping_hash_t *) 0x113d34a8 key = <value optimized out> data = <value optimized out> num_values = <value optimized out> #3 0x080b3533 in subtract_mapping (minuend=0x207ccf34, subtrahend=0x16e11bb0) at mapping.c:3422 No locals. #4 0x08095c5b in eval_instruction (first_instruction=0x208904b2 "an\002", initial_sp=0x813eec0) at interpret.c:10247 m = <value optimized out> pc = <value optimized out> fp = <value optimized out> sp = (svalue_t *) 0x813eed0 num_arg = <value optimized out> instruction = 43 full_instr = <value optimized out> expected_stack = (svalue_t *) 0x0 ap = (svalue_t *) 0x813eed0 use_ap = 0 off_tab = {[0] = 0, [1] = 4, [2] = 12, [3] = 28, [4] = 60, [5] = 124, [6] = 252, [7] = 508, [8] = 1020, [9] = 2044, [10] = 4092, [11] = 8188, [12] = 16380, [13] = 32764, [14] = 65532, [15] = 131068, [16] = 262140, [17] = 524284, [18] = 1048572, [19] = 2097148} #5 0x080a1ea1 in apply_low (fun=0x11e9723c, ob=0x1ac5c570, num_arg=0, b_ign_prot=0, allowRefs=0) at interpret.c:16811 flags = <value optimized out> funstart = (fun_hdr_p) 0x208904b0 "" fx = 20 progp = (program_t *) 0x2088f370 save_csp = <value optimized out> ix = <value optimized out> #6 0x080a280a in int_apply (fun=0x11e9723c, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 No locals. #7 0x0808fe88 in eval_instruction (first_instruction=0x2242d66e "a\036", initial_sp=0x813eea8) at interpret.c:16159 v = <value optimized out> size = <value optimized out> i1 = <value optimized out> i2 = <value optimized out> pc = <value optimized out> fp = <value optimized out> sp = <value optimized out> num_arg = <value optimized out> instruction = 187 full_instr = <value optimized out> expected_stack = (svalue_t *) 0x0 ap = (svalue_t *) 0x813eeb8 use_ap = 0 off_tab = {[0] = 0, [1] = 4, [2] = 12, [3] = 28, [4] = 60, [5] = 124, [6] = 252, [7] = 508, [8] = 1020, [9] = 2044, [10] = 4092, [11] = 8188, [12] = 16380, [13] = 32764, [14] = 65532, [15] = 131068, [16] = 262140, [17] = 524284, [18] = 1048572, [19] = 2097148} #8 0x080a1ea1 in apply_low (fun=0x967150c, ob=0xb5b26bc, num_arg=3, b_ign_prot=0, allowRefs=0) at interpret.c:16811 flags = <value optimized out> funstart = (fun_hdr_p) 0x2242d66c "\003" fx = 1 progp = (program_t *) 0x2242d5e8 save_csp = <value optimized out> ix = <value optimized out> #9 0x080a280a in int_apply (fun=0x967150c, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 No locals. #10 0x0808fe88 in eval_instruction (first_instruction=0x28261e63 "a\036\001\n>\036\002\b\003a\b\003\a\020b�b{\f(�b{\a)\002\f{\n)\036\aj\017a\n=\036\a\020K*nx", initial_sp=0x813ee78) at interpret.c:16159 v = <value optimized out> size = <value optimized out> i1 = <value optimized out> i2 = <value optimized out> pc = <value optimized out> fp = <value optimized out> sp = <value optimized out> num_arg = <value optimized out> instruction = 187 full_instr = <value optimized out> expected_stack = (svalue_t *) 0x0 ap = (svalue_t *) 0x813ee88 use_ap = 0 off_tab = {[0] = 0, [1] = 4, [2] = 12, [3] = 28, [4] = 60, [5] = 124, [6] = 252, [7] = 508, [8] = 1020, [9] = 2044, [10] = 4092, [11] = 8188, [12] = 16380, [13] = 32764, [14] = 65532, [15] = 131068, [16] = 262140, [17] = 524284, [18] = 1048572, [19] = 2097148} #11 0x080e7350 in catch_instruction (flags=0, offset=21, i_sp=0x81b4c04, i_pc=0x28261e63 "a\036\001\n>\036\002\b\003a\b\003\a\020b�b{\f(�b{\a)\002\f{\n)\036\aj\017a\n=\036\a\020K*nx", i_fp=0x813ee10, reserve_cost=4000, i_context=0x0) at simulate.c:447 rc = <value optimized out> old_out_of_memory = 0 #12 0x0808bf35 in eval_instruction (first_instruction=0x28261d3a "`\001\fanN", initial_sp=0x813ee70) at interpret.c:9381 offset = 0 flags = 0 reserve_cost = <value optimized out> pc = <value optimized out> fp = <value optimized out> sp = <value optimized out> num_arg = <value optimized out> instruction = 31 full_instr = <value optimized out> expected_stack = (svalue_t *) 0x0 ap = (svalue_t *) 0x813ee80 use_ap = 0 off_tab = {[0] = 0, [1] = 4, [2] = 12, [3] = 28, [4] = 60, [5] = 124, [6] = 252, [7] = 508, [8] = 1020, [9] = 2044, [10] = 4092, [11] = 8188, [12] = 16380, [13] = 32764, [14] = 65532, [15] = 131068, [16] = 262140, [17] = 524284, [18] = 1048572, [19] = 2097148} #13 0x080a1ea1 in apply_low (fun=0xa21bc70, ob=0x1350ed60, num_arg=1, b_ign_prot=0, allowRefs=0) at interpret.c:16811 flags = <value optimized out> funstart = (fun_hdr_p) 0xc <Address 0xc out of bounds> fx = 260010820 progp = (program_t *) 0x282617c8 save_csp = <value optimized out> ix = <value optimized out> #14 0x080a280a in int_apply (fun=0xa21bc70, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 No locals. #15 0x0808fe88 in eval_instruction (first_instruction=0x282676be "`\001\003a\ff\036", initial_sp=0x813edd0) at interpret.c:16159 v = <value optimized out> size = <value optimized out> i1 = <value optimized out> i2 = <value optimized out> pc = <value optimized out> fp = <value optimized out> sp = <value optimized out> num_arg = <value optimized out> instruction = 187 full_instr = <value optimized out> expected_stack = (svalue_t *) 0x0 ap = (svalue_t *) 0x813ee00 use_ap = 0 off_tab = {[0] = 0, [1] = 4, [2] = 12, [3] = 28, [4] = 60, [5] = 124, [6] = 252, [7] = 508, [8] = 1020, [9] = 2044, [10] = 4092, [11] = 8188, [12] = 16380, [13] = 32764, [14] = 65532, [15] = 131068, [16] = 262140, [17] = 524284, [18] = 1048572, [19] = 2097148} #16 0x080a1ea1 in apply_low (fun=0xa20bc38, ob=0x1350ed60, num_arg=1, b_ign_prot=0, allowRefs=0) at interpret.c:16811 flags = <value optimized out> funstart = (fun_hdr_p) 0x282676bc "\001\005`\001\003a\ff\036" fx = 14 progp = (program_t *) 0x282617c8 save_csp = <value optimized out> ix = <value optimized out> #17 0x080a280a in int_apply (fun=0xa20bc38, ob=0x1, num_arg=0, b_ign_prot=0, b_use_default=1) at interpret.c:16889 No locals. #18 0x080a4799 in sapply_int (fun=0xa20bc38, ob=0x1350ed60, num_arg=1, b_find_static=0, b_use_default=1) at interpret.c:17050 expected_sp = <value optimized out> #19 0x0804bca9 in parse_command (buff=0xbf8cad66 "xcall dmaster->stopphase5()", from_efun=0) at actions.c:1098 ret = (svalue_t *) 0x811687c type = <value optimized out> command_object = (object_t *) 0x1350ed60 next = <value optimized out> insert = <value optimized out> p = <value optimized out> s = (sentence_t *) 0x1b9259dc marker_sent = <value optimized out> length = 5 save_current_object = (object_t *) 0x0 save_command_giver = (object_t *) 0xe79bb10 #20 0x0804ddaf in execute_command (str=0xbf8cad66 "xcall dmaster->stopphase5()", ob=0xe79bb10) at actions.c:1258 context = { rt = { last = 0x8170280, type = -1 }, this_player = 0xe79bb10, mark_player = 0x0, marker = 0x0, cmd = 0x0, verb = 0x0, action_verb = 0x0, errmsg = { type = 3, x = { exponent = 0, closure_type = 0, quotes = 0, num_arg = 0, extern_args = 0, generic = 0 }, u = { str = 0x9b2e420, charp = 0x9b2e420 "\t", number = 162718752, ob = 0x9b2e420, vec = 0x9b2e420, strct = 0x9b2e420, map = 0x9b2e420, lambda = 0x9b2e420, mantissa = 162718752, cb = 0x9b2e420, generic = 0x9b2e420, lvalue = 0x9b2e420, protected_lvalue = 0x9b2e420, protected_char_lvalue = 0x9b2e420, protected_range_lvalue = 0x9b2e420, error_handler = 0x9b2e420 } }, errobj = 0x14773d8c } res = <value optimized out> #21 0x08054612 in backend () at backend.c:671 time_now = 1188167163 buf = "2007.08.27 00:26:03 Garbage collection req by allocator (slow_shut to do: 0, time since last gc: 1188167163\n\000\b\b�\214�\v\004\b\b8�" buff = "xcall dmaster->stopphase5()", '\0' <repeats 973 times>, "wait;no;wait;n;wait;no;wait;no;wait;o;wait;no;wait;no;wait;no;wait;no;wait;o;wait;o;wait;o;wait;s;wait;so;wait;so;wait;o;wait;o;wait;n;wait;n;wait;n;wait;n;wait;n;"... prevent_object_cleanup = 0 #22 0x080b2435 in main (argc=Cannot access memory at address 0x0 ) at main.c:615 path = "/home/mud/mudlib", '\0' <repeats 1609 times>, "�w�\f�\214�i��\223\212ַ�w��O��Q�\000\000\000\000\214�\214�\234V�", '\0' <repeats 24 times>, "\223\212ַ\000\000\000\000 P�", '\0' <repeats 12 times>, "8u�", '\0' <repeats 20 times>, ".��", '\0' <repeats 16 times>, "xw�\220�\214�i��\205\227�\204w��O�8u�L\225�\020�\214�\234V�\205\227�\217\227�", '\0' <repeats 16 times>, "\205\227�\000\000\000\000 P�", '\0' <repeats 12 times>... i = 5 set = { __val = {[0] = 8192, [1] = 0 <repeats 31 times>} } rc = 0 destructedkeys.diff (3,310 bytes)
Index: trunk/src/mapping.c =================================================================== --- trunk/src/mapping.c (Revision 2314) +++ trunk/src/mapping.c (Arbeitskopie) @@ -1450,6 +1450,7 @@ mapping_hash_t * hm, *hm2 = NULL; mapping_cond_t * cm, *cm2 = NULL; mp_int common_width; /* == min(num_values, new_width) */ + p_int num_entries; /* Set the width variables */ if (m->num_values >= new_width) @@ -1475,6 +1476,8 @@ } } + + num_entries = m->num_entries; /* Get the target mapping without a hash, but with a condensed block * big enough to hold all entries. @@ -1531,39 +1534,42 @@ map_chain_t *last = NULL, *mc, *mc2; for (mc = *mcp++; mc; mc = mc->next) - { - svalue_t *src, *dest; - p_int i; - - mc2 = new_map_chain(m2); - if (!mc2) + if(destructed_object_ref(&(mc->data[0]))) + num_entries--; + else { - xfree(hm2); - outofmem(SIZEOF_MCH(mc, new_width), "hash link"); - /* NOTREACHED */ - return NULL; - } + svalue_t *src, *dest; + p_int i; - /* Copy the key and the common values */ - for (src = &(mc->data[0]), dest = &(mc2->data[0]), i = common_width - ; i >= 0 - ; --i, src++, dest++) - { - assign_svalue_no_free(dest, src); - } + mc2 = new_map_chain(m2); + if (!mc2) + { + xfree(hm2); + outofmem(SIZEOF_MCH(mc, new_width), "hash link"); + /* NOTREACHED */ + return NULL; + } - /* Zero out any extraneous values */ - for (dest = &(mc2->data[common_width+1]), i = new_width - common_width - ; i > 0 - ; --i, dest++) - { - put_number(dest, 0); - } + /* Copy the key and the common values */ + for (src = &(mc->data[0]), dest = &(mc2->data[0]), i = common_width + ; i >= 0 + ; --i, src++, dest++) + { + assign_svalue_no_free(dest, src); + } + /* Zero out any extraneous values */ + for (dest = &(mc2->data[common_width+1]), i = new_width - common_width + ; i > 0 + ; --i, dest++) + { + put_number(dest, 0); + } - mc2->next = last; - last = mc2; - } + + mc2->next = last; + last = mc2; + } *mcp2++ = last; } while (--size); @@ -1616,7 +1622,7 @@ /* --- Finalize the basis structure --- */ - m2->num_entries = m->num_entries; + m2->num_entries = num_entries; /* That's it. */ return m2; destructedkeys_v2.diff (4,169 bytes)
Index: trunk/src/mapping.c =================================================================== --- trunk/src/mapping.c (Revision 2314) +++ trunk/src/mapping.c (Arbeitskopie) @@ -1450,6 +1450,7 @@ mapping_hash_t * hm, *hm2 = NULL; mapping_cond_t * cm, *cm2 = NULL; mp_int common_width; /* == min(num_values, new_width) */ + p_int num_entries; /* Set the width variables */ if (m->num_values >= new_width) @@ -1475,6 +1476,8 @@ } } + + num_entries = m->num_entries; /* Get the target mapping without a hash, but with a condensed block * big enough to hold all entries. @@ -1531,39 +1534,42 @@ map_chain_t *last = NULL, *mc, *mc2; for (mc = *mcp++; mc; mc = mc->next) - { - svalue_t *src, *dest; - p_int i; - - mc2 = new_map_chain(m2); - if (!mc2) + if(destructed_object_ref(&(mc->data[0]))) + num_entries--; + else { - xfree(hm2); - outofmem(SIZEOF_MCH(mc, new_width), "hash link"); - /* NOTREACHED */ - return NULL; - } + svalue_t *src, *dest; + p_int i; - /* Copy the key and the common values */ - for (src = &(mc->data[0]), dest = &(mc2->data[0]), i = common_width - ; i >= 0 - ; --i, src++, dest++) - { - assign_svalue_no_free(dest, src); - } + mc2 = new_map_chain(m2); + if (!mc2) + { + xfree(hm2); + outofmem(SIZEOF_MCH(mc, new_width), "hash link"); + /* NOTREACHED */ + return NULL; + } - /* Zero out any extraneous values */ - for (dest = &(mc2->data[common_width+1]), i = new_width - common_width - ; i > 0 - ; --i, dest++) - { - put_number(dest, 0); - } + /* Copy the key and the common values */ + for (src = &(mc->data[0]), dest = &(mc2->data[0]), i = common_width + ; i >= 0 + ; --i, src++, dest++) + { + assign_svalue_no_free(dest, src); + } + /* Zero out any extraneous values */ + for (dest = &(mc2->data[common_width+1]), i = new_width - common_width + ; i > 0 + ; --i, dest++) + { + put_number(dest, 0); + } - mc2->next = last; - last = mc2; - } + + mc2->next = last; + last = mc2; + } *mcp2++ = last; } while (--size); @@ -1595,10 +1601,26 @@ ; src_ix < cm->size ; src_ix++, src_key++) { - if (src_key->type != T_INVALID) + if (src_key->type == T_INVALID) + ; // Do nothing + else if (destructed_object_ref(src_key)) { + // We have to fill the space. + // (Alternatively we could decrease m->cond->size.) p_int i; + num_entries--; + + dest_key->type = T_INVALID; + dest_key++; + + for (i = new_width; i > 0; i--, dest_data++) + put_number(dest_data, 0); + } + else + { + p_int i; + src_data = COND_DATA(cm, src_ix, m->num_values); /* Copy the key and the common data */ @@ -1616,7 +1638,7 @@ /* --- Finalize the basis structure --- */ - m2->num_entries = m->num_entries; + m2->num_entries = num_entries; /* That's it. */ return m2; | ||||
|
m = m - ([0]) creates a shallow copy of the mapping (via copy_mapping as an alias for resize_mapping()). But resize_mapping() requires that check_map_for_destr() is called before, because otherwise assign_svalue_no_free would zero out destructed objects even if they are a key in the mapping. Two uses of copy_mapping() don't do this (inl_copy_svalue_no_free and subtract_mapping) and that's why the number 0 shows up in a hash chain where it doesn't belong. I attached a patch to make resize_mapping aware of destructed object references as keys, alternatively you could just call check_map_for_destr() in inl_copy_svlaue_no_free and subtract_mapping. Greetings, Gnomi. |
|
Resolved with Gnomi's v2 patch. |
Date Modified | Username | Field | Change |
---|---|---|---|
2007-09-19 13:10 | zesstra | New Issue | |
2007-09-19 15:12 | zesstra | File Added: stack | |
2007-09-19 18:21 | Gnomi | File Added: destructedkeys.diff | |
2007-09-19 18:46 | Gnomi | File Added: destructedkeys_v2.diff | |
2007-09-19 18:54 | Gnomi | Note Added: 0000543 | |
2007-10-01 00:14 |
|
Note Added: 0000546 | |
2007-10-01 00:14 |
|
Status | new => resolved |
2007-10-01 00:21 |
|
Resolution | open => fixed |
2007-10-01 00:21 |
|
Fixed in Version | => 3.3.716 |
2010-11-16 09:42 |
|
Source_changeset_attached | => ldmud.git master a9a0af7a |
2013-02-24 00:05 | zesstra | Relationship added | related to 0000816 |
2018-01-29 18:59 |
|
Source_changeset_attached | => ldmud.git master a9a0af7a |
2018-01-29 21:57 |
|
Source_changeset_attached | => ldmud.git master a9a0af7a |