#424 closed defect (fixed)
user mask crashes when editing nonexistant field
Reported by: | westram | Owned by: | westram |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | Library (GUI) | Version: | gtkport |
Keywords: | Cc: |
Description (last modified by westram)
reproduce:
- store attached macro in ~/.arb_prop/macros
- run
cd $ARBHOME bin/arb_ntree --execute _logged demo.arb
- edit 'Author' field
Attachments (1)
Change History (7)
Changed 11 years ago by westram
comment:1 Changed 11 years ago by westram
- Description modified (diff)
- works in trunk
- macro needs to be stored in ~/.arb_prop (as long as #425 is not fixed)
comment:2 Changed 11 years ago by epruesse
If it happens when the field doesn't exist and the masks work by mapping awars, it's probably a problem in AW_awar.cxx at the bottom where the awars are bound to G_OBJECT properties. There is no code to "create" database entries IIRC.
comment:3 Changed 11 years ago by westram
- Milestone changed from gtkmerge to powerusability
- Owner changed from devel to westram
- Status changed from new to assigned
comment:4 Changed 11 years ago by westram
- Status changed from assigned to new
comment:5 Changed 11 years ago by epruesse
- Resolution set to fixed
- Status changed from new to closed
fixed by r11647
The problem was that the CB in the AWT_edit_string code disconnected itself from the AWAR (and thereby the signal). Disconnecting any other CB would have been fine, but removing itself invalidated the iterator in the emission loop — undefined behavior i.e. a crash resulted.
AW_signal is now "reentrant". Signal-handlers (aka CBs or slots) are now marked as deleted, no longer executed, and removed upon completion of signal emission.
Re-emitting a signal in a handler causes recursion. Recursion depth is limited to 100 (will abort with warning by means of aw_return_if_fail).
comment:6 Changed 9 years ago by westram
- Milestone powerusability deleted
Milestone powerusability deleted