Skip to content

Commit a495f75

Browse files
committed
Destroy reactors when they finished their job
1 parent c90e73a commit a495f75

File tree

1 file changed

+52
-10
lines changed

1 file changed

+52
-10
lines changed

src/benchmark/quicksort.ts

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ class QuickSorter extends Reactor {
4343
resultArr: State<number[]>;
4444
numFragments: State<number>;
4545

46-
leftReactor: Reactor | undefined;
47-
rightReactor: Reactor | undefined;
46+
leftReactor: State<QuickSorter | undefined>;
47+
rightReactor: State<QuickSorter | undefined>;
4848

4949
constructor(parent: Reactor, name = "root") {
5050
super(parent, name);
@@ -57,6 +57,9 @@ class QuickSorter extends Reactor {
5757
this.resultArr = new State([]);
5858
this.numFragments = new State(0);
5959

60+
this.leftReactor = new State(void 114514);
61+
this.rightReactor = new State(void 1919810);
62+
6063
// When the parent sends a message, we send it to children.
6164
this.addMutation(
6265
[this.parentReadPort],
@@ -68,7 +71,9 @@ class QuickSorter extends Reactor {
6871
this.leftReadPort,
6972
this.rightReadPort,
7073
this.resultArr,
71-
this.numFragments
74+
this.numFragments,
75+
this.leftReactor,
76+
this.rightReactor
7277
],
7378
function (
7479
this,
@@ -79,7 +84,9 @@ class QuickSorter extends Reactor {
7984
leftread,
8085
rightread,
8186
resultArr,
82-
numFragments
87+
numFragments,
88+
s_leftreactor, // This is really cursed, but s_ is to indicate that this is a state
89+
s_rightreactor
8390
) {
8491
const hierarchyImplementation = (
8592
useHierarchy
@@ -118,6 +125,9 @@ class QuickSorter extends Reactor {
118125
`${this.getReactor()._name}/r`
119126
);
120127

128+
s_leftreactor.set(leftReactor);
129+
s_rightreactor.set(rightReactor);
130+
121131
// Connect ports accoringly
122132
this.connect(leftWritePort, leftReactor.parentReadPort);
123133
this.connect(rightWritePort, rightReactor.parentReadPort);
@@ -130,17 +140,26 @@ class QuickSorter extends Reactor {
130140
}
131141
);
132142

133-
this.addReaction(
143+
this.addMutation(
134144
[this.leftReadPort],
135145
[
136146
this.leftReadPort,
137147
this.resultArr,
138148
this.numFragments,
139-
this.writable(this.parentWritePort)
149+
this.writable(this.parentWritePort),
150+
this.leftReactor
140151
],
141-
function (this, leftreadport, resultArr, numFragments, parentWrite) {
152+
function (
153+
this,
154+
leftreadport,
155+
resultArr,
156+
numFragments,
157+
parentWrite,
158+
s_leftreactor
159+
) {
142160
const leftResult = leftreadport.get();
143161
const myResult = resultArr.get();
162+
const leftReactor = s_leftreactor.get();
144163
if (leftResult == null) {
145164
throw Error("Left return null");
146165
}
@@ -149,28 +168,43 @@ class QuickSorter extends Reactor {
149168
"Result length is 0, but should contain at least the pivots."
150169
);
151170
}
171+
if (leftReactor == null) {
172+
throw Error("Right reactor is null.");
173+
}
152174

153175
console.log(`I received a result from my left! ${leftResult}!`);
154176
resultArr.set([...leftResult, ...myResult]);
155177

178+
this.delete(leftReactor);
179+
s_leftreactor.set(void "kksk");
180+
156181
numFragments.set(numFragments.get() + 1);
157182
if (numFragments.get() === 3) {
158183
parentWrite.set(resultArr.get());
159184
}
160185
}
161186
);
162187

163-
this.addReaction(
188+
this.addMutation(
164189
[this.rightReadPort],
165190
[
166191
this.rightReadPort,
167192
this.resultArr,
168193
this.numFragments,
169-
this.writable(this.parentWritePort)
194+
this.writable(this.parentWritePort),
195+
this.rightReactor
170196
],
171-
function (this, rightreadport, resultArr, numFragments, parentWrite) {
197+
function (
198+
this,
199+
rightreadport,
200+
resultArr,
201+
numFragments,
202+
parentWrite,
203+
s_rightreactor
204+
) {
172205
const rightResult = rightreadport.get();
173206
const myResult = resultArr.get();
207+
const rightReactor = s_rightreactor.get();
174208
if (rightResult == null) {
175209
throw Error("Right return null");
176210
}
@@ -179,10 +213,18 @@ class QuickSorter extends Reactor {
179213
"Result length is 0, but should contain at least the pivots."
180214
);
181215
}
216+
if (rightReactor == null) {
217+
throw Error("Right reactor is null.");
218+
}
182219

183220
console.log(`I received a result from my right! ${rightResult}!`);
184221
resultArr.set([...myResult, ...rightResult]);
185222

223+
// Destroy right reactor and the connection
224+
225+
this.delete(rightReactor);
226+
s_rightreactor.set(void "tnok");
227+
186228
numFragments.set(numFragments.get() + 1);
187229
if (numFragments.get() === 3) {
188230
parentWrite.set(resultArr.get());

0 commit comments

Comments
 (0)