b446bce497fd9bd1302d00e44845a2d35f7aeb30
larrym
Wed May 30 15:49:44 2012 -0700
special case out of memory aborts to give a better error message (#5147)
diff --git src/hg/hgTables/hgTables.c src/hg/hgTables/hgTables.c
index eb3325d..73675cf 100644
--- src/hg/hgTables/hgTables.c
+++ src/hg/hgTables/hgTables.c
@@ -129,35 +129,60 @@
if (len > maxLen)
{
len = maxLen;
extra = " ...";
}
char *s = cloneStringZ(text,len);
char *r;
stripHtmlTags(s);
eraseTrailingSpaces(s);
r = replaceChars(s, " ", " ");
hPrintf("
%s%s | ", r, extra);
freeMem(s);
freeMem(r);
}
+static void earlyAbortHandler(char *format, va_list args)
+{
+// provide more explicit message when we run out of memory (#5147).
+popWarnHandler();
+if(strstr(format, "needLargeMem:") || strstr(format, "carefulAlloc:"))
+ format = "Region selected is too large for calculation. Please specify a smaller region or try limiting to fewer data points.";
+vaWarn(format, args);
+noWarnAbort();
+}
+
+static void errAbortHandler(char *format, va_list args)
+{
+// provide more explicit message when we run out of memory (#5147).
+if(strstr(format, "needLargeMem:") || strstr(format, "carefulAlloc:"))
+ htmlVaWarn("Region selected is too large for calculation. Please specify a smaller region or try limiting to fewer data points.", args);
+else
+ {
+ // call previous handler
+ popWarnHandler();
+ vaWarn(format, args);
+ }
+noWarnAbort();
+}
+
static void vaHtmlOpen(char *format, va_list args)
/* Start up a page that will be in html format. */
{
puts("Content-Type:text/html\n");
cartVaWebStart(cart, database, format, args);
+pushWarnHandler(errAbortHandler);
}
void htmlOpen(char *format, ...)
/* Start up a page that will be in html format. */
{
va_list args;
va_start(args, format);
vaHtmlOpen(format, args);
va_end(args);
}
void htmlClose()
/* Close down html format page. */
{
cartWebEnd();
@@ -1721,30 +1746,31 @@
if (doGalaxy() && !cgiOptionalString(hgtaDoGalaxyQuery))
sendParamsToGalaxy(hgtaDoTopSubmit, "get output");
else
doOutChromGraphDataCt(track, table);
}
else
errAbort("Don't know how to handle %s output yet", output);
}
void dispatch()
/* Scan for 'do' variables and dispatch to appropriate page-generator.
* By default head to the main page. */
{
struct hashEl *varList;
struct sqlConnection *conn = curTrack ? hAllocConnTrack(database, curTrack) : hAllocConn(database);
+pushWarnHandler(earlyAbortHandler);
/* only allows view table schema function for CGB or GSID servers for the time being */
if (hIsCgbServer() || hIsGsidServer())
{
if (cartVarExists(cart, hgtaDoSchema))
{
doSchema(conn);
}
else
{
if (cartVarExists(cart, hgtaDoValueRange))
{
doValueRange(cartString(cart, hgtaDoValueRange));
}
else
{