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);