Christian Oldiges created WICKET-4665:
-----------------------------------------
Summary: AjaxChannel.Type.DROP actually allows 2 requests in the
"total queue"
Key: WICKET-4665
URL: https://issues.apache.org/jira/browse/WICKET-4665
Project: Wicket
Issue Type: Bug
Components: wicket
Affects Versions: 6.0.0-beta3
Reporter: Christian Oldiges
The schedule JavaScript function of the ajax channel uses a BUSY flag and a
request queue in a callbacks array.
If the channel is marked as busy because there is a request currently being
executed, the second part of the function is executed and for channel type
DROP, the newly scheduled request is put into the callbacks queue.
Using this approach, the dropping channel type actually allows 2 requests in
the "total queue".
The one that triggers the busy = true which is still running and the one that
is stored into the callbacks array.
Reading the documentation of AjaxChannel.DROP says:
dropping - only the last Ajax request is processed, the others are discarded
schedule: function (callback) {
if (this.busy === false) {
this.busy = true;
try {
return callback();
} catch (exception) {
this.busy = false;
Wicket.Log.error("An error occurred
while executing Ajax request:" + exception);
}
} else {
Wicket.Log.info("Channel busy - postponing...");
if (this.type === 's') { // stack
this.callbacks.push(callback);
}
else { /* drop */
this.callbacks = [];
// THIS IS WRONG this.callbacks[0] =
callback;
}
return null;
}
},
To make it work, the dropping channel should NOT store the currently scheduled
request, but simply clear the callbacks array.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira