3202c22c6702bbbaf211bd054403e2fbf3c8c071 braney Wed Mar 15 11:54:20 2017 -0700 fix brain dead error I introduced in snake support. Also, clean up error handling. diff --git src/hg/hgTracks/snakeTrack.c src/hg/hgTracks/snakeTrack.c index 86f878b..1a84742 100644 --- src/hg/hgTracks/snakeTrack.c +++ src/hg/hgTracks/snakeTrack.c @@ -1268,64 +1268,66 @@ char *aliasName = chromName; if (chromAlias) { if (differentWord(chromAlias, aliasName)) aliasName = chromAlias; } boolean isPsl = sameString(tg->tdb->type, "pslSnake"); // if we have a network error we want to put out a message about it struct errCatch *errCatch = errCatchNew(); if (errCatchStart(errCatch)) { char *fileName = trackDbSetting(tg->tdb, "bigDataUrl"); char *otherSpecies = trackDbSetting(tg->tdb, "otherSpecies"); - char *errString; + char *errString = "empty"; int handle = -1; if (!isPsl) { - int handle = halOpenLOD(fileName, &errString); + handle = halOpenLOD(fileName, &errString); if (handle < 0) - warn("HAL open error: %s\n", errString); + { + errAbort("HAL open error: %s\n", errString); + goto out; + } } boolean isPackOrFull = (tg->visibility == tvFull) || (tg->visibility == tvPack); hal_dup_type_t dupMode = (isPackOrFull) ? HAL_QUERY_AND_TARGET_DUPS : HAL_QUERY_DUPS; hal_seqmode_type_t needSeq = isPackOrFull && (winBaseCount < showSnpWidth) ? HAL_LOD0_SEQUENCE : HAL_NO_SEQUENCE; int mapBackAdjacencies = (tg->visibility == tvFull); char codeVarName[1024]; safef(codeVarName, sizeof codeVarName, "%s.coalescent", tg->tdb->track); char *coalescent = cartOptionalString(cart, codeVarName); char *otherDbName = trackHubSkipHubName(database); struct hal_block_results_t *head = NULL; if (isPsl) { head = pslSnakeBlocks(fileName, tg, chromName, winStart, winEnd, 10000000); } else { head = halGetBlocksInTargetRange(handle, otherSpecies, otherDbName, aliasName, winStart, winEnd, 0, needSeq, dupMode,mapBackAdjacencies, coalescent, &errString); } // did we get any blocks from HAL if (head == NULL) { - warn("HAL get blocks error: %s\n", errString); - errCatchEnd(errCatch); - return; + errAbort("HAL get blocks error: %s\n", errString); + goto out; } struct hal_block_t* cur = head->mappedBlocks; struct linkedFeatures *lf = NULL; struct hash *qChromHash = newHash(5); struct linkedFeatures *lfList = NULL; char buffer[4096]; #ifdef NOTNOW struct hal_target_dupe_list_t* targetDupeBlocks = head->targetDupeBlocks; for(;targetDupeBlocks; targetDupeBlocks = targetDupeBlocks->next) { printf("
id: %d qChrom %s\n", targetDupeBlocks->id, targetDupeBlocks->qChrom); struct hal_target_range_t *range = targetDupeBlocks->tRange; for(; range; range = range->next) @@ -1414,30 +1416,32 @@ { slSort(&lf->components, snakeFeatureCmpQStart); } } else if ((tg->visibility == tvPack) && (lfList != NULL)) { assert(lfList->next == NULL); slSort(&lfList->components, snakeFeatureCmpTStart); } //halFreeBlocks(head); //halClose(handle, myThread); tg->items = lfList; } + +out: errCatchEnd(errCatch); if (errCatch->gotError) { tg->networkErrMsg = cloneString(errCatch->message->string); tg->drawItems = bigDrawWarning; tg->totalHeight = bigWarnTotalHeight; } errCatchFree(&errCatch); } void halSnakeDrawLeftLabels(struct track *tg, int seqStart, int seqEnd, struct hvGfx *hvg, int xOff, int yOff, int width, int height, boolean withCenterLabels, MgFont *font, Color color, enum trackVisibility vis) /* Draw left label (shortLabel) in pack and dense modes. */