Updates:
Status: Fixed
Cc: adrian.lienhard
Labels: Milestone-1.2
Comment #1 on issue 3498 by stephane.ducasse: remove:ifAbsent: in linked
list leads to interruption/sync problems
http://code.google.com/p/pharo/issues/detail?id=3498
the definition is
remove: aLinkOrObject ifAbsent: aBlock
"Remove aLink from the receiver. If it is not there, answer the result
of
evaluating aBlock."
|link|
link := self linkOf: aLinkOrObject ifAbsent: [^aBlock value].
self removeLink: link.
^aLinkOrObject
and andreas suggests to revert to use the squeak version
remove: aLink ifAbsent: aBlock
"Remove aLink from the receiver. If it is not there, answer the result
of
evaluating aBlock."
| tempLink |
aLink == firstLink
ifTrue: [firstLink := aLink nextLink.
aLink == lastLink
ifTrue: [lastLink := nil]]
ifFalse: [tempLink := firstLink.
[tempLink == nil ifTrue: [^aBlock value].
tempLink nextLink == aLink]
whileFalse: [tempLink := tempLink
nextLink].
tempLink nextLink: aLink nextLink.
aLink == lastLink
ifTrue: [lastLink := tempLink]].
aLink nextLink: nil.
^aLink