Skip to content

Commit bd6e5bb

Browse files
authored
Merge pull request #1 from dionisiydk/dev
syncronizationFixForWaitingToBorrowObject
2 parents 63dca9e + c276abf commit bd6e5bb

13 files changed

+39
-36
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
as yet unclassified
1+
pooling
22
ensureMinimumIdleObjects
33
self critical: [ self whileNotEnoughIdleObjects: [ self addObject ] ]
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
as yet unclassified
1+
pooling
22
fixMaxActiveObjects
33

44
self critical: [maxActiveObjects := self numberOfAvailableObjects].
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
as yet unclassified
1+
pooling
22
hasEnoughIdleObjects
33
^ minIdleObjects ifNil: [ true ] ifNotNil: [ idleObjects size >= minIdleObjects ]
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
as yet unclassified
1+
pooling
22
ifNotEnoughIdleObjects: aBlock
33
^ self hasEnoughIdleObjects ifTrue: aBlock

ObjectPool.package/OPBasicPool.class/instance/migrateObjectsInto.andDo..st

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
as yet unclassified
1+
pooling
22
migrateObjectsInto: anotherPool andDo: aBlock
33

44
self critical: [
5-
borrowedObjects ifNotEmpty: [ self error: 'Pool allow migration only when al objects are free' ].
5+
borrowedObjects ifNotEmpty: [ self error: 'Pool allow migration only when all objects are free' ].
66

77
idleObjects do: [ :each |
88
anotherPool objectToPool: each.

ObjectPool.package/OPBasicPool.class/instance/objectForBorrow.st

-11
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
pooling
2+
unsafeBorrow
3+
| newObject |
4+
self critical: [
5+
maxActiveObjects ifNotNil: [
6+
maxWaitForBorrow
7+
ifNil: [ self waitUntil: [ self numberOfActiveObjects < maxActiveObjects ] ]
8+
ifNotNil: [ self waitUntil: [ self numberOfActiveObjects < maxActiveObjects ] timoutAfterMilliseconds: maxWaitForBorrow ]].
9+
idleObjects ifNotEmpty: [
10+
^ borrowedObjects add: self objectFromPool ] ].
11+
newObject := self makeObject.
12+
self critical: [borrowedObjects add: newObject].
13+
^newObject
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
as yet unclassified
1+
pooling
22
whileNotEnoughIdleObjects: aBlock
33
^ [self hasEnoughIdleObjects] whileFalse: aBlock.

ObjectPool.package/OPBasicPool.class/properties.json

-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
"activator",
1212
"destroyer",
1313
"validator",
14-
"maxWait",
15-
"maxActive",
1614
"minIdleObjects",
1715
"maxIdleObjects",
1816
"maxActiveObjects",

ObjectPool.package/OPPool.class/instance/borrow.st

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ borrow
33
"Returns activated object from pool or creates new pooled object and returns it."
44

55
| object |
6-
[
7-
object := self objectForBorrow.
8-
self objectGoingToBeBorrowed: object.
9-
self critical: [borrowedObjects add: object] ]
6+
[ object := self unsafeBorrow.
7+
self objectGoingToBeBorrowed: object]
108
on: OPAbortOperation
119
do: [ :e |
10+
self critical: [borrowedObjects remove: object].
1211
self destroyObject: object.
1312
e retry ].
1413
^ object

ObjectPool.package/OPPool.class/instance/objectForBorrow.st

-3
This file was deleted.

ObjectPool.package/OPPool.class/instance/return..st

+10-9
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ return: anObject
33
"Returns previously borrowed object from the pool. If object is not from this pool then
44
ObjectPoolWrongPoolError is raised."
55

6-
self
7-
critical: [
8-
(borrowedObjects includes: anObject)
9-
ifTrue: [ borrowedObjects remove: anObject ]
10-
ifFalse: [ OPWrongPoolError signal: 'Object is not from this pool instance.' ] ].
11-
[
12-
self objectGoingToBeReturned: anObject.
13-
self objectToPool: anObject.
14-
] on: OPAbortOperation do: [ self destroyObject: anObject. ].
6+
self critical: [
7+
(borrowedObjects includes: anObject)
8+
ifFalse: [ OPWrongPoolError signal: 'Object is not from this pool instance.' ]].
9+
10+
[self objectGoingToBeReturned: anObject] on: OPAbortOperation do: [
11+
^self destroyObject: anObject].
12+
13+
self critical: [
14+
borrowedObjects remove: anObject.
15+
self objectToPool: anObject]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
private
2+
unsafeBorrow
3+
| object |
4+
object := self objectFromPoolOrElse: [ self makeObject ].
5+
self critical: [borrowedObjects add: object].
6+
^object

0 commit comments

Comments
 (0)