In imagej/pom.xml I added: <scijava-common.version>2.2.1-SNAPSHOT</scijava-common.version>
in the <properties> section On Wed, Oct 16, 2013 at 2:46 PM, Lee Kamentsky <l...@broadinstitute.org>wrote: > Are you editing one of the POMs to pick up the 2.2.1-SNAPSHOT version of > scijava-common? > > > On Wed, Oct 16, 2013 at 3:45 PM, Barry DeZonia <bdezo...@gmail.com> wrote: > >> I'm not having any problems building scijava-common master against IJ2 >> master. >> >> >> On Wed, Oct 16, 2013 at 2:25 PM, Lee Kamentsky >> <l...@broadinstitute.org>wrote: >> >>> I have a very simple fix in scijava-common, but it seems that the head >>> of the scijava-common master branch is not going to build with the head of >>> the imagej master branch. How should I proceed? I could branch off off >>> scijava-common-2.2.0 I suppose. >>> >>> >>> On Wed, Oct 16, 2013 at 2:44 PM, Barry DeZonia <bdezo...@gmail.com>wrote: >>> >>>> Thanks. I also updated the ticket a bit a few minutes ago. In my second >>>> example problem (closing app with sample image open) it looks like the >>>> original open samples legacy command was not finishing its run. Not sure if >>>> this is related to your event processing changes. >>>> >>>> >>>> On Wed, Oct 16, 2013 at 1:19 PM, Lee Kamentsky <l...@broadinstitute.org >>>> > wrote: >>>> >>>>> Sorry, I missed it. I'll see if I can take a look at it, >>>>> >>>>> >>>>> On Wed, Oct 16, 2013 at 2:15 PM, Barry DeZonia <bdezo...@gmail.com>wrote: >>>>> >>>>>> Lee did you see I reopened ticket #1992 ( >>>>>> http://trac.imagej.net/ticket/1992) that was related to this code >>>>>> change? >>>>>> >>>>>> >>>>>> On Mon, Oct 7, 2013 at 10:15 AM, Barry DeZonia <bdezo...@gmail.com>wrote: >>>>>> >>>>>>> Merged >>>>>>> >>>>>>> >>>>>>> On Mon, Sep 30, 2013 at 2:34 PM, Lee Kamentsky < >>>>>>> l...@broadinstitute.org> wrote: >>>>>>> >>>>>>>> I submitted a patch to scijava-common with the changes. >>>>>>>> >>>>>>>> https://github.com/scijava/scijava-common/pull/13 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Sep 30, 2013 at 3:32 PM, Barry DeZonia >>>>>>>> <bdezo...@gmail.com>wrote: >>>>>>>> >>>>>>>>> A proposed fix would be good Lee. I'd like to test the async >>>>>>>>> status update code for responsiveness (i.e. when opening a large image >>>>>>>>> let's say). Let me know when your fix is in place. Thanks. >>>>>>>>> >>>>>>>>> >>>>>>>>> On Fri, Sep 27, 2013 at 6:54 AM, Lee Kamentsky < >>>>>>>>> l...@broadinstitute.org> wrote: >>>>>>>>> >>>>>>>>>> Thanks Barry, the email was a little rushed - finished it while >>>>>>>>>> going out the door. What do you think about sending the status >>>>>>>>>> messages >>>>>>>>>> asynchronously? It looks to me like the AWT event processing will >>>>>>>>>> display >>>>>>>>>> them in the order received, so that makes sure that a "Finished" >>>>>>>>>> message >>>>>>>>>> will be seen after a "% complete" message. Status reporting is such a >>>>>>>>>> common thing - it'd be a shame for all the worker threads to stall >>>>>>>>>> because >>>>>>>>>> a user was using ImageJ to watch a movie of a cat falling off a TV >>>>>>>>>> while >>>>>>>>>> their batch job was running. >>>>>>>>>> >>>>>>>>>> I think I'll submit a patch to DefaultStatusService for asynch >>>>>>>>>> reporting and maybe Curtis or you could look it over and accept it. >>>>>>>>>> If you >>>>>>>>>> reject, NP. >>>>>>>>>> >>>>>>>>>> --Lee >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Thu, Sep 26, 2013 at 7:53 PM, Barry DeZonia < >>>>>>>>>> bdezo...@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Lee, >>>>>>>>>>> >>>>>>>>>>> I added the synchronized keyword yesterday to fix a bug. We can >>>>>>>>>>> undo that change. I can work around the problem in another fashion >>>>>>>>>>> if >>>>>>>>>>> necessary. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Thu, Sep 26, 2013 at 3:57 PM, Lee Kamentsky < >>>>>>>>>>> l...@broadinstitute.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi all, I'm getting a deadly embrace that happens when the AWT >>>>>>>>>>>> event queue thread tries to get a lock within >>>>>>>>>>>> DefaultDatasetView.getColor >>>>>>>>>>>> and when DefaultStatusService.showStatus on a worker thread tries >>>>>>>>>>>> to >>>>>>>>>>>> publish a synchronous request for status display after taking the >>>>>>>>>>>> DefaultDatasetView's lock in DefaultDatasetView.rebuild. It happens >>>>>>>>>>>> periodically, but it's timing-dependent, so not so reproducible. >>>>>>>>>>>> >>>>>>>>>>>> The bug is somewhat debatable. Possible candidates: It's a >>>>>>>>>>>> little drastic for DefaultDatasetView.getColor to synchronize on >>>>>>>>>>>> the view >>>>>>>>>>>> itself. Maybe some proxy for the color system could have a >>>>>>>>>>>> synchronizing >>>>>>>>>>>> object. The other candidate is DefaultEventService.showStatus >>>>>>>>>>>> which could >>>>>>>>>>>> use EventService.publishLater - I don't think there's much need >>>>>>>>>>>> for status >>>>>>>>>>>> publishers to wait around for the status to show on the screen. >>>>>>>>>>>> >>>>>>>>>>>> The two stack traces: >>>>>>>>>>>> Thread [AWT-EventQueue-0] (Suspended) >>>>>>>>>>>> DefaultDatasetView.getColor(ChannelCollection) line: 261 >>>>>>>>>>>> Synchronized >>>>>>>>>>>> method on DefaultDatasetView >>>>>>>>>>>> FgColorTool(AbstractColorTool).drawIcon() line: 175 >>>>>>>>>>>> FgColorTool(AbstractColorTool).onEvent(DisplayActivatedEvent) >>>>>>>>>>>> line: 184 >>>>>>>>>>>> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) >>>>>>>>>>>> line: not available [native method] >>>>>>>>>>>> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 >>>>>>>>>>>> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 >>>>>>>>>>>> Method.invoke(Object, Object...) line: 597 >>>>>>>>>>>> DefaultEventService$ProxySubscriber<E>.onEvent(E) line: 282 >>>>>>>>>>>> DefaultEventService$ProxySubscriber<E>.onEvent(Object) line: 1 >>>>>>>>>>>> DefaultEventBus(ThreadSafeEventService).publish(Object, >>>>>>>>>>>> String, Object, List, List, StackTraceElement[]) line: 971 >>>>>>>>>>>> DefaultEventBus.access$1(DefaultEventBus, Object, String, >>>>>>>>>>>> Object, List, List, StackTraceElement[]) line: 1 >>>>>>>>>>>> DefaultEventBus$1.run() line: 201 >>>>>>>>>>>> DefaultThreadService.invoke(Runnable) line: 91 >>>>>>>>>>>> DefaultEventBus.publishNow(Object, String, Object, List, List, >>>>>>>>>>>> StackTraceElement[]) line: 195 >>>>>>>>>>>> DefaultEventBus.publishNow(Object) line: 86 >>>>>>>>>>>> DefaultEventService.publish(E) line: 95 >>>>>>>>>>>> DefaultDisplayService.setActiveDisplay(Display<?>) line: 129 >>>>>>>>>>>> DefaultDisplayService.onEvent(WinActivatedEvent) line: 247 >>>>>>>>>>>> NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) >>>>>>>>>>>> line: not available [native method] >>>>>>>>>>>> NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 >>>>>>>>>>>> DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 >>>>>>>>>>>> Method.invoke(Object, Object...) line: 597 >>>>>>>>>>>> DefaultEventService$ProxySubscriber<E>.onEvent(E) line: 282 >>>>>>>>>>>> DefaultEventService$ProxySubscriber<E>.onEvent(Object) line: 1 >>>>>>>>>>>> DefaultEventBus(ThreadSafeEventService).publish(Object, >>>>>>>>>>>> String, Object, List, List, StackTraceElement[]) line: 971 >>>>>>>>>>>> DefaultEventBus.access$1(DefaultEventBus, Object, String, >>>>>>>>>>>> Object, List, List, StackTraceElement[]) line: 1 >>>>>>>>>>>> DefaultEventBus$1.run() line: 201 >>>>>>>>>>>> DefaultThreadService.invoke(Runnable) line: 91 >>>>>>>>>>>> DefaultEventBus.publishNow(Object, String, Object, List, List, >>>>>>>>>>>> StackTraceElement[]) line: 195 >>>>>>>>>>>> DefaultEventBus.publishNow(Object) line: 86 >>>>>>>>>>>> DefaultEventService.publish(E) line: 95 >>>>>>>>>>>> AWTWindowEventDispatcher.windowActivated(WindowEvent) line: 94 >>>>>>>>>>>> SwingDisplayWindow(Window).processWindowEvent(WindowEvent) >>>>>>>>>>>> line: 1877 >>>>>>>>>>>> SwingDisplayWindow(JFrame).processWindowEvent(WindowEvent) >>>>>>>>>>>> line: 274 >>>>>>>>>>>> SwingDisplayWindow(Window).processEvent(AWTEvent) line: 1823 >>>>>>>>>>>> SwingDisplayWindow(Component).dispatchEventImpl(AWTEvent) >>>>>>>>>>>> line: 4630 >>>>>>>>>>>> SwingDisplayWindow(Container).dispatchEventImpl(AWTEvent) line: >>>>>>>>>>>> 2099 >>>>>>>>>>>> SwingDisplayWindow(Window).dispatchEventImpl(AWTEvent) line: >>>>>>>>>>>> 2478 >>>>>>>>>>>> SwingDisplayWindow(Component).dispatchEvent(AWTEvent) line: 4460 >>>>>>>>>>>> >>>>>>>>>>>> DefaultKeyboardFocusManager(KeyboardFocusManager).redispatchEvent(Component, >>>>>>>>>>>> AWTEvent) line: 1850 >>>>>>>>>>>> DefaultKeyboardFocusManager.typeAheadAssertions(Component, >>>>>>>>>>>> AWTEvent) line: 910 >>>>>>>>>>>> DefaultKeyboardFocusManager.dispatchEvent(AWTEvent) line: 409 >>>>>>>>>>>> SwingDisplayWindow(Component).dispatchEventImpl(AWTEvent) line: >>>>>>>>>>>> 4502 >>>>>>>>>>>> SwingDisplayWindow(Container).dispatchEventImpl(AWTEvent) >>>>>>>>>>>> line: 2099 >>>>>>>>>>>> SwingDisplayWindow(Window).dispatchEventImpl(AWTEvent) line: >>>>>>>>>>>> 2478 >>>>>>>>>>>> SwingDisplayWindow(Component).dispatchEvent(AWTEvent) line: >>>>>>>>>>>> 4460 >>>>>>>>>>>> EventQueue.dispatchEvent(AWTEvent) line: 599 >>>>>>>>>>>> >>>>>>>>>>>> DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent(SentEvent).dispatch() >>>>>>>>>>>> line: 55 >>>>>>>>>>>> DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch() >>>>>>>>>>>> line: 183 >>>>>>>>>>>> DefaultKeyboardFocusManager.sendMessage(Component, AWTEvent) >>>>>>>>>>>> line: 210 >>>>>>>>>>>> DefaultKeyboardFocusManager.dispatchEvent(AWTEvent) line: 286 >>>>>>>>>>>> SwingDisplayWindow(Component).dispatchEventImpl(AWTEvent) >>>>>>>>>>>> line: 4502 >>>>>>>>>>>> SwingDisplayWindow(Container).dispatchEventImpl(AWTEvent) line: >>>>>>>>>>>> 2099 >>>>>>>>>>>> SwingDisplayWindow(Window).dispatchEventImpl(AWTEvent) line: >>>>>>>>>>>> 2478 >>>>>>>>>>>> SwingDisplayWindow(Component).dispatchEvent(AWTEvent) line: 4460 >>>>>>>>>>>> EventQueue.dispatchEvent(AWTEvent) line: 599 >>>>>>>>>>>> SequencedEvent.dispatch() line: 101 >>>>>>>>>>>> EventQueue.dispatchEvent(AWTEvent) line: 597 >>>>>>>>>>>> EventDispatchThread.pumpOneEventForFilters(int) line: 269 >>>>>>>>>>>> EventDispatchThread.pumpEventsForFilter(int, Conditional, >>>>>>>>>>>> EventFilter) line: 184 >>>>>>>>>>>> EventDispatchThread.pumpEventsForHierarchy(int, Conditional, >>>>>>>>>>>> Component) line: 174 >>>>>>>>>>>> EventDispatchThread.pumpEvents(int, Conditional) line: 169 >>>>>>>>>>>> EventDispatchThread.pumpEvents(Conditional) line: 161 >>>>>>>>>>>> EventDispatchThread.run() line: 122 >>>>>>>>>>>> >>>>>>>>>>>> Thread [SciJava-4b2922f6-Thread-27] (Suspended) >>>>>>>>>>>> Object.wait(long) line: not available [native method] >>>>>>>>>>>> EventQueue$1AWTInvocationLock(Object).wait() line: 485 Waiting >>>>>>>>>>>> for AWT event thread to read invocation request. >>>>>>>>>>>> EventQueue.invokeAndWait(Runnable) line: 993 >>>>>>>>>>>> DefaultThreadService.invoke(Runnable) line: 95 >>>>>>>>>>>> DefaultEventBus.publishNow(Object, String, Object, List, >>>>>>>>>>>> List, StackTraceElement[]) line: 195 >>>>>>>>>>>> DefaultEventBus.publishNow(Object) line: 86 >>>>>>>>>>>> DefaultEventService.publish(E) line: 95 >>>>>>>>>>>> DefaultStatusService.showStatus(int, int, String) line: 77 >>>>>>>>>>>> DefaultMinMaxMethod<T>.report() line: 296 >>>>>>>>>>>> DefaultMinMaxMethod<T>.process() line: 155 >>>>>>>>>>>> DefaultAutoscaleMethod<T>.getRange(IterableInterval<T>) line: >>>>>>>>>>>> 70 >>>>>>>>>>>> DefaultAutoscaleService.getDefaultIntervalRange(IterableInterval<RealType<?>>) >>>>>>>>>>>> line: 97 >>>>>>>>>>>> >>>>>>>>>>>> DefaultAutoscaleService.getDefaultRandomAccessRange(RandomAccessibleInterval<RealType<?>>) >>>>>>>>>>>> line: 105 >>>>>>>>>>>> DefaultDatasetView.autoscale(int) line: 176 >>>>>>>>>>>> DefaultDatasetView.initializeView(boolean) line: 499 >>>>>>>>>>>> DefaultDatasetView.rebuild() line: 383 Takes the >>>>>>>>>>>> DefaultDatasetView lock. >>>>>>>>>>>> DefaultImageDisplay.rebuild() line: 140 >>>>>>>>>>>> DefaultImageDisplay.display(Object) line: 273 >>>>>>>>>>>> DefaultOverlayService.addOverlays(ImageDisplay, List<Overlay>) >>>>>>>>>>>> line: 148 >>>>>>>>>>>> TurboRegRegister.run() line: 144 >>>>>>>>>>>> CommandModule.run() line: 196 >>>>>>>>>>>> ModuleRunner.run() line: 168 >>>>>>>>>>>> ModuleRunner.call() line: 129 >>>>>>>>>>>> ModuleRunner.call() line: 1 >>>>>>>>>>>> FutureTask$Sync.innerRun() line: 303 >>>>>>>>>>>> FutureTask<V>.run() line: 138 >>>>>>>>>>>> ThreadPoolExecutor$Worker.runTask(Runnable) line: 886 >>>>>>>>>>>> ThreadPoolExecutor$Worker.run() line: 908 >>>>>>>>>>>> Thread.run() line: 662 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> _______________________________________________ >>>>>>>>>>>> ImageJ-devel mailing list >>>>>>>>>>>> ImageJ-devel@imagej.net >>>>>>>>>>>> http://imagej.net/mailman/listinfo/imagej-devel >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >
_______________________________________________ ImageJ-devel mailing list ImageJ-devel@imagej.net http://imagej.net/mailman/listinfo/imagej-devel