[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,