[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: gEDA: PCB core dump on undo
Dan McMahill wrote:
> Daniel Wisehart wrote:
>
>> If I start adding line segments to the rat lines layer, and after
>> adding a segment or two but still in the middle of the command, I type
>> a 'u', PCB core dumps. The problem is that SearchObjectByLocation()
>> is failing to find anything.
>>
>> Here is a patch that keeps PCB from core dumping, but I think that
>> SearchObjectByLocation() probably needs looking at.
>>
>> Regards,
>> Daniel
>
>
> The reason SearchObjectByLocation is failing is we need to search for
> RATLINE_TYPE as well:
>
>
>
> --- action.c 12 Apr 2006 22:51:02 -0000 1.81
> +++ action.c 28 Apr 2006 23:32:04 -0000
> @@ -5391,5 +5391,5 @@
> LineTypePtr ptr2;
> /* this search is guranteed to succeed */
> - SearchObjectByLocation (LINE_TYPE, &ptr1, &ptrtmp,
> + SearchObjectByLocation (LINE_TYPE | RATLINE_TYPE, &ptr1,
> &ptrtmp,
> &ptr3,
> Crosshair.AttachedLine.Point1.X,
> Crosshair.AttachedLine.Point1.Y, 0);
>
>
> This almost fixes it. I can add a bunch of ratline segments. I hit 'u'
> and each time I do that, it undoes the last segment. This works all the
> way up until I just have the initial point. One more 'u' and I segfault
> again. I think the problem there is I should not be in this section of
> code (Crosshair.AttachedLine.State == STATE_THIRD) anymore. So, I'll
> keep looking.
>
> -Dan
oh, duh... If I'd kept reading the code I would have seen a few more
spots a few lines down where RATLINE_TYPE needed to be or-ed in. And
also it looks like we weren't quite keeping track of the number of added
line segments.
Try the attached patch.
-Dan
Index: action.c
===================================================================
RCS file: /cvsroot/pcb/pcb/src/action.c,v
retrieving revision 1.81
diff -u -2 -r1.81 action.c
--- action.c 12 Apr 2006 22:51:02 -0000 1.81
+++ action.c 28 Apr 2006 23:43:14 -0000
@@ -1128,4 +1128,5 @@
if ((line = AddNet ()))
{
+ addedLines++;
AddObjectToCreateUndoList (RATLINE_TYPE, line, line, line);
IncrementUndoSerialNumber ();
@@ -5391,5 +5392,5 @@
LineTypePtr ptr2;
/* this search is guranteed to succeed */
- SearchObjectByLocation (LINE_TYPE, &ptr1, &ptrtmp,
+ SearchObjectByLocation (LINE_TYPE | RATLINE_TYPE, &ptr1, &ptrtmp,
&ptr3, Crosshair.AttachedLine.Point1.X,
Crosshair.AttachedLine.Point1.Y, 0);
@@ -5421,5 +5422,6 @@
{
/* this search should find the restored line */
- SearchObjectByLocation (LINE_TYPE, &ptr1, &ptrtmp,
+ SearchObjectByLocation (LINE_TYPE | RATLINE_TYPE, &ptr1,
+ &ptrtmp,
&ptr3,
Crosshair.AttachedLine.Point2.X,
@@ -5441,5 +5443,6 @@
{
/* this search is guranteed to succeed too */
- SearchObjectByLocation (LINE_TYPE, &ptr1, &ptrtmp,
+ SearchObjectByLocation (LINE_TYPE | RATLINE_TYPE, &ptr1,
+ &ptrtmp,
&ptr3,
Crosshair.AttachedLine.Point1.X,