Bug 1032646 - Record discovery replies to avoid purging every time. r=paul

This commit is contained in:
J. Ryan Stinnett 2014-06-30 21:00:00 +02:00
parent be9057c904
commit e5625c5dae
2 changed files with 20 additions and 0 deletions

View File

@ -329,6 +329,9 @@ Discovery.prototype = {
let remoteDevice = update.device;
let remoteHost = update.from;
// Record the reply as received so it won't be purged as missing
this._expectingReplies.from.delete(remoteDevice);
// First, loop over the known services
for (let service in this.remoteServices) {
let devicesWithService = this.remoteServices[service];

View File

@ -116,6 +116,9 @@ add_task(function*() {
discovery.addService("penguins", { tux: false });
yield scanForChange("penguins", "updated");
// Scan again, but nothing should be removed
yield scanForNoChange("penguins", "removed");
// Split the scanning side from the service side to simulate the machine with
// the service becoming unreachable
gTestTransports = {};
@ -137,3 +140,17 @@ function scanForChange(service, changeType) {
discovery.scan();
return deferred.promise;
}
function scanForNoChange(service, changeType) {
let deferred = promise.defer();
let timer = setTimeout(() => {
deferred.resolve();
}, discovery.replyTimeout + 500);
discovery.on(service + "-device-" + changeType, function onChange() {
discovery.off(service + "-device-" + changeType, onChange);
clearTimeout(timer);
deferred.reject(new Error("Unexpected change occurred"));
});
discovery.scan();
return deferred.promise;
}