Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8160242

Make DefaultSkin creation in Control#impl_processCSS reentrant safe

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 9
    • 9
    • javafx
    • None

      There's the possibility that impl_processCSS is called before the creation of the DefaultSkin is finished (eg when using a ComboBox) leading to a situation where you have 2 active Skins for a Control

      The stack looks like this in this situation:
      > ComboBoxListViewSkin<T>(ComboBoxBaseSkin<T>).<init>(ComboBoxBase<T>, ComboBoxBaseBehavior<T>) line: 57
      > ComboBoxListViewSkin<T>(ComboBoxPopupControl<T>).<init>(ComboBoxBase<T>, ComboBoxBaseBehavior<T>) line: 61
      > ComboBoxListViewSkin<T>.<init>(ComboBox<T>) line: 113
      > ComboBox<T>.createDefaultSkin() line: 420
      > ComboBox<T>(Control).impl_processCSS(WritableValue<Boolean>) line: 859
      > FSimpleSelectControl<T>(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > FSimpleSelectControl<T>(Control).impl_processCSS(WritableValue<Boolean>) line: 855
      > FlexibleGridLayoutPane$LayoutItem(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > GridPane(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > FlexibleGridLayoutPane(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > VBox(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > ScrollPaneSkin$4(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > ScrollPaneSkin$3(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > ScrollPane(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > ScrollPane(Control).impl_processCSS(WritableValue<Boolean>) line: 855
      > ScrollPane(Node).processCSS() line: 9056
      > SimpleListCell<T>(Node).applyCss() line: 9153
      > ComboBoxListViewSkin<T>(ComboBoxBaseSkin<T>).updateDisplayArea() line: 150
      > ComboBoxListViewSkin<T>.updateButtonCell() line: 406 [local variables unavailable]
      > ComboBoxListViewSkin<T>.<init>(ComboBox<T>) line: 134
      > ComboBox<T>.createDefaultSkin() line: 420
      > ComboBox<T>(Control).impl_processCSS(WritableValue<Boolean>) line: 859
      > FSimpleSelectControl<T>(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > FSimpleSelectControl<T>(Control).impl_processCSS(WritableValue<Boolean>) line: 862
      > FlexibleGridLayoutPane$LayoutItem(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > GridPane(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > FlexibleGridLayoutPane(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280
      > VBox(Parent).impl_processCSS(WritableValue<Boolean>) line: 1280

      A possible fix would be to remember that we are currently creating the DefaultSkin and skip creating the default-skin

            jgiles Jonathan Giles
            tschindl Tom Schindl
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: