2875244eecffbef41bf80afab6f2dc27c2a6bf9b
angie
  Tue Apr 19 11:21:58 2011 -0700
Track #34 (dbVar): oops, forgot NULL check -> segv when boringaggregate variants (sv) are excluded.

diff --git src/hg/hgTracks/gvfTrack.c src/hg/hgTracks/gvfTrack.c
index 7c3ee6c..f645dcc 100644
--- src/hg/hgTracks/gvfTrack.c
+++ src/hg/hgTracks/gvfTrack.c
@@ -64,39 +64,41 @@
 char *aParentName = getAttributeVal(a, "Parent");
 char *bParentName = getAttributeVal(b, "Parent");
 if (bParentName != NULL && sameString(bParentName, a->name))
     return -1;
 else if (aParentName != NULL && sameString(aParentName, b->name))
     return 1;
 else if (aParentName != NULL && bParentName != NULL && sameString(aParentName, bParentName))
     return strcmp(getAttributeVal(a, "var_type"), getAttributeVal(b, "var_type"));
 else
     {
     const struct bed8Attrs *bedCmpA = a, *bedCmpB = b;
     if (aParentName != NULL)
 	bedCmpA = hashFindVal(nameHash, aParentName);
     if (bParentName != NULL)
 	bedCmpB = hashFindVal(nameHash, bParentName);
+    int diff = 0;
+    if (bedCmpA != NULL && bedCmpB != NULL)
+	{
     // no need to compare chrom here
-    int diff = ((bedCmpB->chromEnd - bedCmpB->chromStart) -
+	diff = ((bedCmpB->chromEnd - bedCmpB->chromStart) -
 		(bedCmpA->chromEnd - bedCmpA->chromStart));
     if (diff == 0)
-	{
 	diff = bedCmpA->chromStart - bedCmpB->chromStart;
-	if (diff == 0)
-	    diff = strcmp(bedCmpA->name, bedCmpB->name);
 	}
+    if (diff == 0)
+	diff = strcmp(aParentName, bParentName);
     return diff;
     }
 }
 
 static void gvfLoad(struct track *tg)
 /* Load GVF items from a bed8Attrs database table. */
 {
 struct sqlConnection *conn = hAllocConn(database);
 int rowOffset;
 struct sqlResult *sr = hRangeQuery(conn, tg->table, chromName, winStart, winEnd, NULL, &rowOffset);
 char **row;
 struct bed8Attrs *list = NULL;
 // if we someday get dense GVF tracks, might consider upping the default hash size:
 if (nameHash == NULL)
     nameHash= hashNew(0);