2
0
mirror of https://github.com/esiur/esiur-js.git synced 2025-05-05 20:12:59 +00:00

dead lock avoidance

This commit is contained in:
Ahmed Zamil 2024-07-16 10:02:04 +03:00
parent 2d04c5402f
commit 6cdcd85c56
3 changed files with 32 additions and 12 deletions

View File

@ -1,6 +1,6 @@
{
"name": "esiur",
"version": "2.3.2",
"version": "2.3.3",
"description": "Distributed Object Framework",
"main": "esiur.js",
"type": "module",

View File

@ -97,6 +97,8 @@ import AuthorizationResultsResponse from '../../Security/Membership/Authorizatio
import IIPAuthPacketIAuthHeader from '../../Net/Packets/IIPAuthPacketIAuthHeader.js';
import AuthorizationRequest from '../../Security/Membership/AuthorizationRequest.js';
import DistributedResourceAttachRequestInfo from './DistributedResourceAttachRequestInfo.js';
export default class DistributedConnection extends IStore {
// fields
@ -1486,18 +1488,18 @@ export default class DistributedConnection extends IStore {
&& this.#session.remoteMethod == AuthenticationMethod.None)
{
// change to Map<byte, object> for compatibility
let headers = Codec.compose(session.localHeaders, this);
let headers = Codec.compose(this.#session.localHeaders, this);
this.#sendParams()
.addUint8(IIPAuthPacketInitialize.TokenNoAuth)
.addDC(headers)
.done();
}
else if (session.localMethod == AuthenticationMethod.None
&& session.remoteMethod == AuthenticationMethod.None)
else if (this.#session.localMethod == AuthenticationMethod.None
&& this.#session.remoteMethod == AuthenticationMethod.None)
{
// change to Map<byte, object> for compatibility
let headers = Codec.compose(session.localHeaders, this);
let headers = Codec.compose(this.#session.localHeaders, this);
// @REVIEW: MITM Attack can still occure
this.#sendParams()
@ -1565,7 +1567,7 @@ export default class DistributedConnection extends IStore {
this.#resourceRequests.values.forEach((x) => {
try {
x.triggerError(new AsyncException(ErrorType.Management, 0, "Connection closed"));
x.reply.triggerError(new AsyncException(ErrorType.Management, 0, "Connection closed"));
} catch (ex) { }
});
@ -2956,13 +2958,19 @@ export default class DistributedConnection extends IStore {
resource = this.#neededResources.item(id);
let request = this.#resourceRequests.item(id);
let requestInfo = this.#resourceRequests.item(id);
if (request != null) {
if (resource != null && (requestSequence?.includes(id) ?? false))
if (requestInfo != null) {
if (resource != null && (requestSequence?.includes(id) ?? false)){
return new AsyncReply(resource);
else
return request;
}
else if (resource != null && requestInfo.requestSequence.includes(id)) {
console.log("Avoid deadlock...", id, requestSequence, requestInfo.requestSequence );
return new AsyncReply(resource);
}
else {
return requestInfo.reply;
}
}
else if (resource != null && !resource._p.suspended) {
@ -2973,11 +2981,12 @@ export default class DistributedConnection extends IStore {
var reply = new AsyncReply();
this.#resourceRequests.set(id, reply);
var newSequence =
requestSequence != null ? [...requestSequence, id] : [id];
this.#resourceRequests.set(id, new DistributedResourceAttachRequestInfo(reply, newSequence));
var self = this;
this.#sendRequest(IIPPacketAction.AttachResource)

View File

@ -0,0 +1,11 @@
export default class DistributedResourceAttachRequestInfo
{
reply;
requestSequence;
constructor(reply, requestSequence){
this.reply = reply;
this.requestSequence = requestSequence;
}
}