Skip to content

IndexOutOfBoundsException updating a JTable - multi-threaded race condition? #5

Description

@mt-inside

Steps

  • Start FS2 with one share with some files in it, running as forced indexnode.

Actual

  • This isn't always reproducible, making me think it's a race.
  • See log with backtraces below.
  • Looks like one thread is doing HTTP work (an upload) and marshals a call onto another thread to update the Uploads table in the GUI. BY the time it gets there the table is in a state that makes its operation invalid.

2012.08.06 23:16:07 INFO: Now exporting shares on port 41234
2012.08.06 23:16:07 INFO: Checking for updates...
2012.08.06 23:16:07 INFO: Refresh complete (share Default download directory on magrathea)
2012.08.06 23:16:07 INFO: The indexnode at http://127.0.0.1:1337 is now known as 'magrathea'
2012.08.06 23:16:08 WARNING: Couldn't remove from uploads table: java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetException
at java.awt.EventQueue.invokeAndWait(EventQueue.java:1045)
at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1347)
at client.gui.Utilities.dispatch(Utilities.java:248)
at client.gui.Utilities.dispatch(Utilities.java:272)
at client.shareserver.ShareServer$UploadsTableModel.transferEnded(ShareServer.java:185)
at client.shareserver.ShareServer$HttpEventsImpl.transferEnded(ShareServer.java:271)
at common.HttpUtil$HttpTransferInfo.transferComplete(HttpUtil.java:293)
at common.HttpFileHandler.handle(HttpFileHandler.java:106)
at common.httpserver.Filter$Chain.doFilter(Filter.java:34)
at client.indexnode.IndexNodeOnlyFilter.doFilter(IndexNodeOnlyFilter.java:46)
at common.httpserver.Filter$Chain.doFilter(Filter.java:36)
at common.FS2Filter.doFilter(FS2Filter.java:92)
at common.httpserver.Filter$Chain.doFilter(Filter.java:36)
at common.httpserver.impl.ExchangeImpl.(ExchangeImpl.java:123)
at common.httpserver.impl.ServerImpl$1$1.run(ServerImpl.java:128)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.rowsDeleted(DefaultRowSorter.java:880)
at javax.swing.JTable.notifySorter(JTable.java:4278)
at javax.swing.JTable.sortedTableChanged(JTable.java:4122)
at javax.swing.JTable.tableChanged(JTable.java:4399)
at client.shareserver.ShareServer$UploadsTableModel$2.run(ShareServer.java:190)
at client.gui.Utilities$1.run(Utilities.java:241)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:216)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:647)
at java.awt.EventQueue.access$000(EventQueue.java:96)
at java.awt.EventQueue$1.run(EventQueue.java:608)
at java.awt.EventQueue$1.run(EventQueue.java:606)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:617)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions