Kai-Martin Knaak wrote: > Unfortunately, current git head of PCB enters an infinite loop if > the attribute is set correctly. The attached patch fixes this bug. > Now, DRC does indeed ignore the layers marked by the attribute. > ( I triple checked ;-)
Well, it was working for a smallish pet project. Unfortunately, it still fails in a similar way for my real project (the large one). As a workaround, I tried to temporarily remove all tracks from the layers I don't want to apply the DRC check to. But this breaks connectivity and DRC gets swamped by false positives. Looks like I am running out of options... Maybe, PCB::skip-drc can be made to work, after all. I was able to narrow down the code path for the entry into the endless loop. It is a continue statement in LookupLOConnectionsToPVList() in the middle of find.c . See below. The offending lines are marked with an exclamation mark at the start of the line. Anyone got an idea, what might be the correct way to skip here? /------------from pcb/src/find.c------------------------------------ static bool LookupLOConnectionsToPVList (bool AndRats) { Cardinal layer; struct pv_info info; /* loop over all PVs currently on list */ while (PVList.Location < PVList.Number) { /* get pointer to data */ info.pv = *(PVLIST_ENTRY (PVList.Location)); EXPAND_BOUNDS (&info.pv); /* check pads */ if (setjmp (info.env) == 0) r_search (PCB->Data->pad_tree, (BoxType *) & info.pv, NULL, LOCtoPVpad_callback, &info); else return true; /* now all lines, arcs and polygons of the several layers */ for (layer = 0; layer < max_copper_layer; layer++) { ! if (LAYER_PTR (layer)->no_drc) ! continue; info.layer = layer; /* add touching lines */ if (setjmp (info.env) == 0) r_search (LAYER_PTR (layer)->line_tree, (BoxType *) & info.pv, NULL, LOCtoPVline_callback, &info); else return true; /* add touching arcs */ if (setjmp (info.env) == 0) r_search (LAYER_PTR (layer)->arc_tree, (BoxType *) & info.pv, NULL, LOCtoPVarc_callback, &info); else return true; /* check all polygons */ if (setjmp (info.env) == 0) r_search (LAYER_PTR (layer)->polygon_tree, (BoxType *) & info.pv, NULL, LOCtoPVpoly_callback, &info); else return true; } /* Check for rat-lines that may intersect the PV */ if (AndRats) { if (setjmp (info.env) == 0) r_search (PCB->Data->rat_tree, (BoxType *) & info.pv, NULL, LOCtoPVrat_callback, &info); else return true; } PVList.Location++; } return false; } \------------------------------------------------- ---<)kaimartin(>--- -- Kai-Martin Knaak tel: +49-511-762-2895 Universität Hannover, Inst. für Quantenoptik fax: +49-511-762-2211 Welfengarten 1, 30167 Hannover http://www.iqo.uni-hannover.de -----> not happy with moderation of geda-user mailinglist _______________________________________________ geda-user mailing list geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user