svn commit: r631428 - /lenya/trunk/src/modules-core/usecase/usecases.js

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
Author: andreas
Date: Tue Feb 26 15:57:58 2008
New Revision: 631428

URL: http://svn.apache.org/viewvc?rev=631428&view=rev
Log:
Invalidate continuation after usecase completion/cancelling to save memory.

Modified:
    lenya/trunk/src/modules-core/usecase/usecases.js

Modified: lenya/trunk/src/modules-core/usecase/usecases.js
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/usecase/usecases.js?rev=631428&r1=631427&r2=631428&view=diff
==============================================================================
--- lenya/trunk/src/modules-core/usecase/usecases.js (original)
+++ lenya/trunk/src/modules-core/usecase/usecases.js Tue Feb 26 15:57:58 2008
@@ -177,6 +177,7 @@
  * @param view, a org.apache.lenya.cms.usecase.UsecaseView object
  * @param proxy, a org.apache.lenya.cms.usecase.UsecaseProxy object
  * @param generic, a generic Javascript object for custom flow code to preserve state information (currently not used by the default code)
+ * @return A WebContinuation object or null if no continuation was created.
  *
  * This function invokes customLoopFlow if it exists.
  * Otherwise it falls back to defaultLoopFlow.
@@ -233,11 +234,12 @@
     }
     if (view.createContinuation()) {
         log("debug", "Creating view and continuation, calling Cocoon with viewUri = [" + viewUri + "]");
-        cocoon.sendPageAndWait(viewUri, { "usecase" : proxy });
+        return cocoon.sendPageAndWait(viewUri, { "usecase" : proxy });
     } else {
         log("debug", "Creating view without continuation (!), calling Cocoon with viewUri = [" + viewUri + "]");
         cocoon.sendPage(viewUri, { "usecase" : proxy});
         cocoon.exit(); // we're done.
+        return null;
     }
 }
 
@@ -369,14 +371,16 @@
         releaseUsecase(usecase);
     }
     loadCustomFlow(view);
+    
     // If the usecase has a view uri, this means we want to display something 
     // to the user before proceeding. This also means the usecase can consist
     // of several steps; repeated until the user chooses to submit or cancel.
     if (view != null && view.getViewURI()) {
+        var continuation = null;
         do {
             // show the view:
             try {
-                loopFlow(view, proxy, generic); //usecase must be released here!
+                continuation = loopFlow(view, proxy, generic); //usecase must be released here!
             } catch (exception) {
                 // if something went wrong, try and rollback the usecase:
                 log("error", "Exception during loopFlow(): " + exception, usecaseName);
@@ -401,6 +405,9 @@
                 releaseUsecase(usecase);
             }
         } while (state == "continue");
+        if (continuation != null) {
+            continuation.invalidate();
+        }
     // If the usecase does not have a view uri, we can directly jump to 
     // executeFlow().
     } else {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.