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 |
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 |
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 |
Free forum by Nabble | Edit this page |