|
@@ -684,13 +684,30 @@ selector: "initialize",
|
|
|
category: 'initialization',
|
|
|
fn: function (){
|
|
|
var self=this;
|
|
|
-var $1;
|
|
|
-var sentinel;
|
|
|
+smalltalk.send(self,"_initialize",[],smalltalk.Object);
|
|
|
self["@poolSize"]=(0);
|
|
|
self["@maxPoolSize"]=smalltalk.send(smalltalk.send(self,"_class",[]),"_defaultMaxPoolSize",[]);
|
|
|
self["@queue"]=smalltalk.send((smalltalk.Queue || Queue),"_new",[]);
|
|
|
+self["@worker"]=smalltalk.send(self,"_makeWorker",[]);
|
|
|
+return self},
|
|
|
+args: [],
|
|
|
+source: "initialize\x0a super initialize.\x0a\x09poolSize := 0.\x0a maxPoolSize := self class defaultMaxPoolSize.\x0a queue := Queue new.\x0a worker := self makeWorker",
|
|
|
+messageSends: ["initialize", "defaultMaxPoolSize", "class", "new", "makeWorker"],
|
|
|
+referencedClasses: ["Queue"]
|
|
|
+}),
|
|
|
+smalltalk.ForkPool);
|
|
|
+
|
|
|
+smalltalk.addMethod(
|
|
|
+"_makeWorker",
|
|
|
+smalltalk.method({
|
|
|
+selector: "makeWorker",
|
|
|
+category: 'initialization',
|
|
|
+fn: function (){
|
|
|
+var self=this;
|
|
|
+var $2,$1;
|
|
|
+var sentinel;
|
|
|
sentinel=smalltalk.send((smalltalk.Object || Object),"_new",[]);
|
|
|
-self["@worker"]=(function(){
|
|
|
+$1=(function(){
|
|
|
var block;
|
|
|
self["@poolSize"]=smalltalk.send(self["@poolSize"],"__minus",[(1)]);
|
|
|
self["@poolSize"];
|
|
@@ -698,8 +715,8 @@ block=smalltalk.send(self["@queue"],"_frontIfAbsent_",[(function(){
|
|
|
return sentinel;
|
|
|
})]);
|
|
|
block;
|
|
|
-$1=smalltalk.send(block,"__eq_eq",[sentinel]);
|
|
|
-if(! smalltalk.assert($1)){
|
|
|
+$2=smalltalk.send(block,"__eq_eq",[sentinel]);
|
|
|
+if(! smalltalk.assert($2)){
|
|
|
return smalltalk.send((function(){
|
|
|
return smalltalk.send(block,"_value",[]);
|
|
|
}),"_ensure_",[(function(){
|
|
@@ -707,11 +724,12 @@ return smalltalk.send(self,"_addWorker",[]);
|
|
|
})]);
|
|
|
};
|
|
|
});
|
|
|
-return self},
|
|
|
+return $1;
|
|
|
+},
|
|
|
args: [],
|
|
|
-source: "initialize\x0a\x09| sentinel |\x0a\x09poolSize := 0.\x0a maxPoolSize := self class defaultMaxPoolSize.\x0a queue := Queue new.\x0a sentinel := Object new.\x0a worker := [\x0a\x09\x09| block |\x0a poolSize := poolSize - 1.\x0a\x09\x09block := queue frontIfAbsent: [ sentinel ].\x0a block == sentinel ifFalse: [\x0a \x09[ block value ] ensure: [ self addWorker ]]].",
|
|
|
-messageSends: ["defaultMaxPoolSize", "class", "new", "-", "frontIfAbsent:", "ifFalse:", "ensure:", "addWorker", "value", "=="],
|
|
|
-referencedClasses: ["Queue", "Object"]
|
|
|
+source: "makeWorker\x0a\x09| sentinel |\x0a sentinel := Object new.\x0a ^[ | block |\x0a poolSize := poolSize - 1.\x0a\x09\x09block := queue frontIfAbsent: [ sentinel ].\x0a block == sentinel ifFalse: [\x0a \x09[ block value ] ensure: [ self addWorker ]]]",
|
|
|
+messageSends: ["new", "-", "frontIfAbsent:", "ifFalse:", "ensure:", "addWorker", "value", "=="],
|
|
|
+referencedClasses: ["Object"]
|
|
|
}),
|
|
|
smalltalk.ForkPool);
|
|
|
|