b0828e726eba3cbd345f94f1ed0ad1b334424f7d
angie
Thu Mar 14 10:38:31 2013 -0700
Fixing bug reported via MLQ: When repeatedly adding/modifying customtracks and saving sessions without any cartResets or session loads,
the same ctfile was used in both saved sessions and the user's active
cart, so modifications after saving a session were leaking back to
saved sessions. Fix: copy custom tracks not only when loading a
saved session, but also immediately after saving a session, so that
the user's active cart no longer has the same ctfile (and customTrash
database tables, etc) as the saved session.
fixes #10396, refs #10323
diff --git src/hg/hgSession/hgSession.c src/hg/hgSession/hgSession.c
index 23e2439..875b7c4 100644
--- src/hg/hgSession/hgSession.c
+++ src/hg/hgSession/hgSession.c
@@ -638,30 +638,33 @@
dyStringClear(dy);
dyStringPrintf(dy, "INSERT INTO %s ", namedSessionTable);
dyStringAppend(dy, "(userName, sessionName, contents, shared, "
"firstUse, lastUse, useCount) VALUES (");
dyStringPrintf(dy, "'%s', '%s', ", encUserName, encSessionName);
dyStringAppend(dy, "'");
cleanHgSessionFromCart(cart);
cartEncodeState(cart, dy);
dyStringAppend(dy, "', ");
dyStringPrintf(dy, "%d, ", (shareSession ? 1 : 0));
dyStringPrintf(dy, "%s, now(), %d);", firstUse, useCount);
sqlUpdate(conn, dy->string);
dyStringFree(&dy);
+ /* Prevent modification of custom tracks just saved to namedSessionDb: */
+ cartCopyCustomTracks(cart, cartUsualString(cart, "db", hDefaultDb()));
+
if (useCount > INITIAL_USE_COUNT)
dyStringPrintf(dyMessage,
"Overwrote the contents of session %s "
"(that %s be shared with other users). "
"%s %s",
htmlEncode(sessionName), (shareSession ? "may" : "may not"),
getSessionLink(encUserName, encSessionName),
getSessionEmailLink(encUserName, encSessionName));
else
dyStringPrintf(dyMessage,
"Added a new session %s that %s be shared with other users. "
"%s %s",
htmlEncode(sessionName), (shareSession ? "may" : "may not"),
getSessionLink(encUserName, encSessionName),
getSessionEmailLink(encUserName, encSessionName));