WeakSet published to Public Repository

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

WeakSet published to Public Repository

Joachim Geidel
Hi all,

as I promised a couple of days ago, I've published a new version (7) of
the Weaklings package containing a Weakling-based WeakSet. A WeakSet is
a Set which forgets its elements if they are not referenced elsewhere.
Tests are in WeaklingsTests 3.

I chose to base the implementation on Weaklings, which are ephemerons
(but not Ephemerons with a capital E), because they are easy to use.
Thank you, Travis, for making them available!

BTW, at some point, I declared the WeakSet class as "indexedType: #weak"
to see what happens (this is not in the published version). Oddly
enough, unreferenced elements were now replaced by 0 (i.e. WeakArray
tombstone) when they were garbage collected. I did not expect this, as
the class comment of WeakArray says:

"Further, this is the only class whose references can be weak. Even
subclasses of this class can contain only strong references."

Apparently, this is no longer true in VW 7.4.1. However, I didn't use
this feature because that would have resulted in a more complicated
implementation, and I'm not sure about which VM versions would support it.

Best regards,
Joachim Geidel

Reply | Threaded
Open this post in threaded view
|

[7.4][Store]Crash when publishing from Merge Tool

Carl Gundel
When publishing two merged versions of a bundle we got a walkback (see
bottom).  Does this leave my database in a corrupt state?

-Carl Gundel, author of Liberty BASIC
http://www.libertybasic.com

Unhandled exception: Element not Found
Store.PublishSpecificationList(Collection)>>notFoundError
optimized [] in Collection>>detect:
Store.PublishSpecificationList(ArrayedCollection)>>detect:ifNone:
Store.PublishSpecificationList(Collection)>>detect:
optimized [] in Store.BundleModel>>updateFrom:
List>>do:
Store.BundleModel>>updateFrom:
optimized [] in [] in Store.MergeTool>>publishModified
OrderedCollection>>do:
optimized [] in Store.MergeTool>>publishModified
Store.PublishPundleDialog>>accept
optimized [] in ApplicationModel>>actionFor:
optimized [] in ActionButtonSpec>>typeConvert:
PluggableAdaptor>>setValue:
PluggableAdaptor(ValueModel)>>value:
WinXPTriggerButtonController(TriggerButtonController)>>pressAction
TriggerButtonTracker(BasicButtonTracker)>>finishSelectionFor:
TriggerButtonTracker>>finishSelectionFor:
TriggerButtonTracker(SelectionTracker)>>redButtonReleasedEvent:
RedButtonReleasedEvent>>dispatchTo:
TriggerButtonTracker(SelectionTracker)>>handleEvent:
EventDispatcher>>dispatch:to:
EventDispatcher>>dispatchEvent:
RedButtonReleasedEvent(Event)>>dispatch
RedButtonReleasedEvent(Event)>>dispatchForWindowManager:
optimized [] in WindowManager>>safelyDispatchForWindowManager:
BlockClosure>>on:do:
WindowManager>>safelyDispatchForWindowManager:
WindowManager>>processNextEvent
optimized [] in [] in WindowManager>>newProcess
BlockClosure>>on:do:
optimized [] in WindowManager>>newProcess
BlockClosure>>on:do:
optimized [] in Process class>>forBlock:priority:

----------------------------------------------------------------------
Store.PublishSpecificationList(Collection)>>notFoundError
Receiver:
 a Store.PublishSpecificationList
Instance Variables:
 dependents = a SequenceView
 collection = an Array[12]
 limit = 12
 collectionSize = 12
Context PC = 7

----------------------------------------------------------------------
optimized [] in Collection>>detect:
Receiver:
 an UndefinedObject
Temporaries:
 .self = a Store.PublishSpecificationList[12]
Context PC = 6

----------------------------------------------------------------------
Store.PublishSpecificationList(ArrayedCollection)>>detect:ifNone:
Receiver:
 a Store.PublishSpecificationList
Instance Variables:
 dependents = a SequenceView
 collection = an Array[12]
 limit = 12
 collectionSize = 12
Arguments:
 aBlock = BlockClosure [] in [] in Store.BundleModel>>updateFrom:
 exceptionBlock = BlockClosure [] in Collection>>detect:
Temporaries:
 i = 13
 each = a Store.PublishSpecification
Context PC = 31

----------------------------------------------------------------------
Store.PublishSpecificationList(Collection)>>detect:
Receiver:
 a Store.PublishSpecificationList
Instance Variables:
 dependents = a SequenceView
 collection = an Array[12]
 limit = 12
 collectionSize = 12
Arguments:
 aBlock = BlockClosure [] in [] in Store.BundleModel>>updateFrom:
Context PC = 9

----------------------------------------------------------------------
optimized [] in Store.BundleModel>>updateFrom:
Receiver:
 an UndefinedObject
Arguments:
 desc = PackageDescription (Graphics drawing 293:SHOPTALK)
Temporaries:
 pundleData = nil
 .aCollectionOfDictionaries = a Store.PublishSpecificationList[12]
Context PC = 9

----------------------------------------------------------------------
List>>do:
Receiver:
 a List
Instance Variables:
 dependents = nil
 collection = an Array[12]
 limit = 12
 collectionSize = 12
Arguments:
 aBlock = BlockClosure [] in Store.BundleModel>>updateFrom:
Temporaries:
 index = 12
Context PC = 17

----------------------------------------------------------------------
Store.BundleModel>>updateFrom:
Receiver:
 a Store.BundleModel
Instance Variables:
 name = 'Shoptalk Platform'
 properties = an IdentityDictionary[0]
 dbInfo = an IdentityDictionary[1]
 readonly = false
Arguments:
 aCollectionOfDictionaries = a Store.PublishSpecificationList[12]
Context PC = 10

----------------------------------------------------------------------
optimized [] in [] in Store.MergeTool>>publishModified
Receiver:
 an UndefinedObject
Arguments:
 b = {'Shoptalk Platform'-'1.16.1 Web BASIC branch'-86}
Temporaries:
 bundle = {Shoptalk Platform}
 .pud = a Store.PublishSpecificationList[12]
Context PC = 12

----------------------------------------------------------------------
OrderedCollection>>do:
Receiver:
 an OrderedCollection
Instance Variables:
 firstIndex = 1
 lastIndex = 1
Arguments:
 aBlock = BlockClosure [] in [] in Store.MergeTool>>publishModified
Temporaries:
 index = 1
Context PC = 17

----------------------------------------------------------------------
optimized [] in Store.MergeTool>>publishModified
Receiver:
 an UndefinedObject
Arguments:
 pud = a Store.PublishSpecificationList[12]
Temporaries:
 .self = a Store.MergeTool
Context PC = 21

----------------------------------------------------------------------
Store.PublishPundleDialog>>accept
Receiver:
 a Store.PublishPundleDialog
Instance Variables:
 dependents = an ApplicationWindow 9366
 builder = an UIBuilder
 uiSession = a ControlManager
 eventHandlers = nil
 list = a SelectionInList
 disturbed = a ValueHolder on: true
 subBuilder = an UIBuilder
 items = a SelectionInList
 blessingLevel = a ValueHolder on: 60
 blessingComment = a ValueHolder on: 'Merged by Merge Tool.
Versions integrated:
   Shoptalk Platform(1.16.1 Web BASIC branch,CARL)
'
 publish = a ValueHolder on: true
 versionString = a ValueHolder on: '1.22 Merged'
 binarySave = a ValueHolder on: false
 parcelSave = a ValueHolder on: false
 bundleStructure = a ValueHolder on: false
 databaseLinks = a ValueHolder on: false
 parcelDirectory = a ValueHolder on: 'Shoptalk Platform'
 parcelSaveSource = a ValueHolder on: true
 parcelHideSource = a ValueHolder on: false
 parcelPadded = a ValueHolder on: true
 parcelRepublish = a ValueHolder on: false
 parcelBackup = a ValueHolder on: false
 parcelOverwrite = a ValueHolder on: false
 parcelWarningMessage = nil
 labelDict = a Dictionary[12]
 offsets = an Array[4]
 callBackBlock = BlockClosure [] in Store.MergeTool>>publishModified
 retry = false
 files = a SelectionInList
 publishFile = nil
Context PC = 42

----------------------------------------------------------------------
optimized [] in ApplicationModel>>actionFor:
Receiver:
 an UndefinedObject
Temporaries:
 .self = a Store.PublishPundleDialog
 .aKey = #accept
Context PC = 7

----------------------------------------------------------------------
optimized [] in ActionButtonSpec>>typeConvert:
Receiver:
 an UndefinedObject
Arguments:
 b = a ValueHolder on: nil
 v = true
Temporaries:
 .aValue = BlockClosure [] in ApplicationModel>>actionFor:
Context PC = 5

----------------------------------------------------------------------
PluggableAdaptor>>setValue:
Receiver:
 a PluggableAdaptor
Instance Variables:
 dependents = a WinXPActionButtonView
 model = a ValueHolder on: nil
 getBlock = BlockClosure [] in ActionButtonSpec>>typeConvert:
 putBlock = BlockClosure [] in ActionButtonSpec>>typeConvert:
 updateBlock = BlockClosure [] in ActionButtonSpec>>typeConvert:
Arguments:
 newValue = true
Context PC = 6

----------------------------------------------------------------------
PluggableAdaptor(ValueModel)>>value:
Receiver:
 a PluggableAdaptor
Instance Variables:
 dependents = a WinXPActionButtonView
 model = a ValueHolder on: nil
 getBlock = BlockClosure [] in ActionButtonSpec>>typeConvert:
 putBlock = BlockClosure [] in ActionButtonSpec>>typeConvert:
 updateBlock = BlockClosure [] in ActionButtonSpec>>typeConvert:
Arguments:
 newValue = true
Context PC = 5

----------------------------------------------------------------------
WinXPTriggerButtonController(TriggerButtonController)>>pressAction
Receiver:
 a WinXPTriggerButtonController
Instance Variables:
 model = a PluggableAdaptor
 view = a WinXPActionButtonView
 sensor = a TranslatingSensor
 keyboardProcessor = a KeyboardProcessor
 keyboardHook = nil
 dispatcher = nil
Temporaries:
 helpProc = nil
Context PC = 17

----------------------------------------------------------------------
TriggerButtonTracker(BasicButtonTracker)>>finishSelectionFor:
Receiver:
 a TriggerButtonTracker
Instance Variables:
 controller = a WinXPTriggerButtonController
 inside = true
Arguments:
 aPoint = 48@14
Context PC = 8

----------------------------------------------------------------------
TriggerButtonTracker>>finishSelectionFor:
Receiver:
 a TriggerButtonTracker
Instance Variables:
 controller = a WinXPTriggerButtonController
 inside = true
Arguments:
 aPoint = 48@14
Context PC = 11

----------------------------------------------------------------------
TriggerButtonTracker(SelectionTracker)>>redButtonReleasedEvent:
Receiver:
 a TriggerButtonTracker
Instance Variables:
 controller = a WinXPTriggerButtonController
 inside = true
Arguments:
 aMouseButtonEvent = a RedButtonReleasedEvent
Context PC = 13

----------------------------------------------------------------------
RedButtonReleasedEvent>>dispatchTo:
Receiver:
 a RedButtonReleasedEvent
Instance Variables:
 time = 1178918109
 initiator = an EventDispatcher
 window = an ApplicationWindow 9366
 state = 0
 x = 333
 y = 529
 gx = 698
 gy = 749
 buttonNumber = 1
Arguments:
 anObject = a TriggerButtonTracker
Context PC = 4

----------------------------------------------------------------------
TriggerButtonTracker(SelectionTracker)>>handleEvent:
Receiver:
 a TriggerButtonTracker
Instance Variables:
 controller = a WinXPTriggerButtonController
 inside = true
Arguments:
 anEvent = a RedButtonReleasedEvent
Context PC = 4

----------------------------------------------------------------------
EventDispatcher>>dispatch:to:
Receiver:
 an EventDispatcher
Instance Variables:
 windowController = an ApplicationStandardSystemController
 currentMouseConsumer = nil
 grabbingMouse = false
 keyboardProcessor = a KeyboardProcessor
 lastControlObject = a WinXPScrollBarController
 trapList = nil
 state = nil
 repairDamageWhenDebugging = true
 flushQueueAfterError = true
 distributeEventsWhenDebugging = true
 dragDropInProgress = false
 dragDropTracker = nil
 dispatchUnknownEvents = false
Arguments:
 event = a RedButtonReleasedEvent
 object = a TriggerButtonTracker
Temporaries:
 tmp = nil
Context PC = 10

----------------------------------------------------------------------
EventDispatcher>>dispatchEvent:
Receiver:
 an EventDispatcher
Instance Variables:
 windowController = an ApplicationStandardSystemController
 currentMouseConsumer = nil
 grabbingMouse = false
 keyboardProcessor = a KeyboardProcessor
 lastControlObject = a WinXPScrollBarController
 trapList = nil
 state = nil
 repairDamageWhenDebugging = true
 flushQueueAfterError = true
 distributeEventsWhenDebugging = true
 dragDropInProgress = false
 dragDropTracker = nil
 dispatchUnknownEvents = false
Arguments:
 event = a RedButtonReleasedEvent
Temporaries:
 objectWantingControl = nil
 targetKeyboardProcessor = nil
Context PC = 60

----------------------------------------------------------------------
RedButtonReleasedEvent(Event)>>dispatch
Receiver:
 a RedButtonReleasedEvent
Instance Variables:
 time = 1178918109
 initiator = an EventDispatcher
 window = an ApplicationWindow 9366
 state = 0
 x = 333
 y = 529
 gx = 698
 gy = 749
 buttonNumber = 1
Context PC = 16

----------------------------------------------------------------------
RedButtonReleasedEvent(Event)>>dispatchForWindowManager:
Receiver:
 a RedButtonReleasedEvent
Instance Variables:
 time = 1178918109
 initiator = an EventDispatcher
 window = an ApplicationWindow 9366
 state = 0
 x = 333
 y = 529
 gx = 698
 gy = 749
 buttonNumber = 1
Arguments:
 aWinMgr = a WindowManager
Context PC = 4

----------------------------------------------------------------------
optimized [] in WindowManager>>safelyDispatchForWindowManager:
Receiver:
 an UndefinedObject
Temporaries:
 .event = a RedButtonReleasedEvent
 .self = a WindowManager
Context PC = 6

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
 a BlockClosure
Instance Variables:
 method = CompiledBlock [] in WindowManager>>safelyDispatchForWindowManager:
 outerContext = nil
 copiedValues = an Array[2]
Arguments:
 anExceptionSelector = BadControllerError
 handlerBlock = BlockClosure [] in
WindowManager>>safelyDispatchForWindowManager:
Context PC = 18

----------------------------------------------------------------------
WindowManager>>safelyDispatchForWindowManager:
Receiver:
 a WindowManager
Instance Variables:
 windows = an OrderedCollection[13]
 activeController = nil
 interruptLock = false
 outstandingMetaOrDamage = false
 openInProgress = false
 eventQueue = an EventQueue
 baseProcess = a Process in Semaphore>>wait
 dontFilterEvents = false
Arguments:
 event = a RedButtonReleasedEvent
Context PC = 13

----------------------------------------------------------------------
WindowManager>>processNextEvent
Receiver:
 a WindowManager
Instance Variables:
 windows = an OrderedCollection[13]
 activeController = nil
 interruptLock = false
 outstandingMetaOrDamage = false
 openInProgress = false
 eventQueue = an EventQueue
 baseProcess = a Process in Semaphore>>wait
 dontFilterEvents = false
Temporaries:
 event = a RedButtonReleasedEvent
Context PC = 9

----------------------------------------------------------------------
optimized [] in [] in WindowManager>>newProcess
Receiver:
 an UndefinedObject
Temporaries:
 .self = a WindowManager
Context PC = 13

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
 a BlockClosure
Instance Variables:
 method = CompiledBlock [] in [] in WindowManager>>newProcess
 outerContext = nil
 copiedValues = a WindowManager
Arguments:
 anExceptionSelector = TerminateException
 handlerBlock = BlockClosure [] in [] in WindowManager>>newProcess
Context PC = 18

----------------------------------------------------------------------
optimized [] in WindowManager>>newProcess
Receiver:
 an UndefinedObject
Temporaries:
 .self = a WindowManager
Context PC = 15

----------------------------------------------------------------------
BlockClosure>>on:do:
Receiver:
 a BlockClosure
Instance Variables:
 method = CompiledBlock [] in WindowManager>>newProcess
 outerContext = nil
 copiedValues = a WindowManager
Arguments:
 anExceptionSelector = TerminateException
 handlerBlock = BlockClosure [] in [] in Process class>>forBlock:priority:
Context PC = 18

----------------------------------------------------------------------
optimized [] in Process class>>forBlock:priority:
Receiver:
 an UndefinedObject
Temporaries:
 .aBlock = BlockClosure [] in WindowManager>>newProcess
Context PC = 9


Reply | Threaded
Open this post in threaded view
|

Re: [7.4][Store]Crash when publishing from Merge Tool

Alan Knight-2
At 02:01 PM 7/18/2006, Carl Gundel wrote:

>When publishing two merged versions of a bundle we got a walkback (see
>bottom).  Does this leave my database in a corrupt state?

No, that's the great thing about transactions.

Unfortunately, it's hard to tell much from that stack. It looks like something was confused in the publish dialog, in terms of the list of publish specifications.
--
Alan Knight [|], Cincom Smalltalk Development
[hidden email]
[hidden email]
http://www.cincom.com/smalltalk

"The Static Typing Philosophy: Make it fast. Make it right. Make it run." - Niall Ross