6696987406845625c252a13b690e0c4d7d9e59fa
max
  Thu Mar 26 06:48:48 2015 -0700
This is a go at libifing the CGI startup code. For all CGIs, we need to
call a few basic setup funtions, like UDC config and CGI apoptosis.
(For most CGIs also bottleneck). Instead of adding it to all of our
30+ CGIs, I changed the cart*Shell functions. I think most CGIs call
at least one of these functions. This commit removes the existing
copy/pasted code from a few CGIs and replaces it with one call.
Adding this to the cart-setup means that (like before), UDC is
setup even for small JSON calls and a process is spawned to watch
the CGI and kill it ("Apoptosis"). Any comments on whether this should
be implemented differently are appreciated. I have not added bottleneck
to this function right now as apparently we're calling bottleneck only
from some of our CGIs.

diff --git src/hg/lib/hCommon.c src/hg/lib/hCommon.c
index 04354c2..a8202c6 100644
--- src/hg/lib/hCommon.c
+++ src/hg/lib/hCommon.c
@@ -1,26 +1,31 @@
 /* hCommon.c - routines used by many files in hgap project. */
 
 /* Copyright (C) 2014 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #include "common.h"
 #include "hCommon.h"
 #include "chromInfo.h"
 #include "portable.h"
 #include "hgConfig.h"
 #include "errAbort.h"
+#include "cgiApoptosis.h"
+#include "udc.h"
+#include "knetUdc.h"
+#include "hui.h"
+#include "cart.h"
 
 
 static char *_hgcName = "../cgi-bin/hgc";	/* Path to click processing program. */
 static char *_hgTracksName = "../cgi-bin/hgTracks"; /* Path back to genome browser. */
 static char *_hgTrackUiName = "../cgi-bin/hgTrackUi"; /* Path to extended ui program. */
 static char *_hgFileUiName = "../cgi-bin/hgFileUi";   /* Path to downloladable files CGI. */
 static char *_hgTextName = "../cgi-bin/hgText"; /* Path back to the text browser. */
 static char *_hgTablesName = "../cgi-bin/hgTables"; /* Path back to the table browser. */
 static char *_hgVaiName = "../cgi-bin/hgVai"; /* Path back to the variant annotation integrator. */
 static char *_hgCustomName = "../cgi-bin/hgCustom"; /* Path back to the custom tracks manager. */
 static char *_hgHubConnectName = "../cgi-bin/hgHubConnect"; /* Path back to the track hub manager. */
 static char *_hgSessionName = "../cgi-bin/hgSession";	/* Path to session manager. */
 static char *_hgPalName = "../cgi-bin/hgPal"; /* Path back to the protein aligner */
 static char *_hgVarAnnogratorName = "../cgi-bin/hgVarAnnogrator"; /* Path to variant annot intgr */
 static char *_hgIntegratorName = "../cgi-bin/hgIntegrator"; /* Path to annotation intgrator */
@@ -370,15 +375,39 @@
 void hUserAbort(char *format, ...)
 /* errAbort when a `user' error is detected.  This is an error that comes
  * from user input. This disables the logging stack dumps. */
 {
 va_list args;
 va_start(args, format);
 hVaUserAbort(format, args);
 va_end(args);
 }
 
 boolean hAllowAllTables(void)
 /* Return TRUE if hg.conf's hgta.disableAllTables doesn't forbid an 'all tables' menu. */
 {
 return !cfgOptionBooleanDefault("hgta.disableAllTables", FALSE);
 }
+
+void hCgiStartSetup(struct cart *cart)
+/* should be called at the start of the CGI */
+/* do the CGI setup operations: CGI apoptosis, UDC setup etc  */
+/* cart parameter can be NULL */
+/* is not in cart.c as it can be called from parts of the code that 
+ * do not need a cart */
+{
+static bool setupDone = FALSE;
+if (setupDone)
+    return;
+setupDone = TRUE;
+
+cgiApoptosisSetup();
+
+knetUdcInstall();
+setUdcCacheDir();
+
+if (cart==NULL)
+    udcSetCacheTimeout(300);
+else
+    setUdcTimeout(cart);
+
+}