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

JComboBox SEGV on Solaris

XMLWordPrintable

    • x86, sparc
    • solaris_2.6, solaris_8

      ing args[])
          {
              PUI pui = new PUI();
              String lookAndFeel = "default";

              if (args.length == 1)
              {
                  lookAndFeel = args[0];
              }
              pui.doScreen(lookAndFeel);
          }
      (Review ID: 107916)
      ======================================================================

      Name: ks88420 Date: 09/07/2000


      java version "1.2.2"
      Solaris VM (build Solaris_JDK_1.2.2_05a, native threads, sunwjit)


        To produce the problem, I just have to execute a simple awt based program. The
      same could be done just executing the appletviewer. I've removed all PATH,
      CLASSPATH, LD_LIBRARY_PATH, and JAVA_HOME variables, and even installed the JDK
      in a different directory with no avail. I've looked for a patch that might fix
      this but none seem to address it. The display is going to a remote PC running
      Exceed x-emulation. I've also had the same results with X-Win32. From the
      console, displayed output does not segmenentation fault but the display is
      turned black and must continually be refreshed to be seen. The source code is a
      follows:

      import java.awt.*;

      public class Frame1 extends Frame
      {
      public Frame1()
      {
      setLayout(null);
      setSize(405,305);
      setVisible(false);
      setTitle("AWT Application");
      }

      public Frame1(String title)
      {
      this();
      setTitle(title);
      }

          public void setVisible(boolean b)
      {
      if(b)
      {
      setLocation(50, 50);
      }
      super.setVisible(b);
      }

      static public void main(String args[])
      {
      try
      {
           (new Frame1()).setVisible(true);
      }
      catch (Throwable t)
      {
      System.err.println(t);
      t.printStackTrace();
      System.exit(1);
      }
      }

      public void addNotify()
      {
      Dimension d = getSize();
      super.addNotify();
      if (fComponentsAdjusted)
      return;
      setSize(getInsets().left + getInsets().right + d.width,
      getInsets().top + getInsets().bottom + d.height);
      Component components[] = getComponents();
      for (int i = 0; i < components.length; i++)
      {
      Point p = components[i].getLocation();
      p.translate(getInsets().left, getInsets().top);
      components[i].setLocation(p);
      }
      fComponentsAdjusted = true;
      }
      boolean fComponentsAdjusted = false;
      }



      The output looks like this:

      SIGSEGV 11 segmentation violation
          si_signo [11]: SEGV
          si_errno [0]:
          si_code [1]: SEGV_MAPERR [addr: 0x0]

              stackpointer=E9CF0090
      "Screen Updater" (TID:0x4911b0, sys_thread_t:0x4910e8, state:CW, thread_t:
      t@14, threadID:0xe9c61dd8, stack_bottom:0xe9c62000, stack_size:0x20000) prio=4

      [1] java.lang.Object.wait(Object.java:424)
      [2] sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:78)
      [3] sun.awt.ScreenUpdater.run(ScreenUpdater.java:98)
      -------------------
      "Thread-1" (TID:0x17da48, sys_thread_t:0x17d980, state:MW, thread_t: t@1,
      threadID:0x25118, stack_bottom:0xf0000000, stack_size:0x800000) prio=5

      -------------------
      "AWT-Motif" (TID:0x42b648, sys_thread_t:0x42b580, state:MW, thread_t: t@13,
      threadID:0xe9c91dd8, stack_bottom:0xe9c92000, stack_size:0x20000) prio=5

      [1] sun.awt.motif.MToolkit.run(Native Method)
      [2] java.lang.Thread.run(Thread.java:479)
      -------------------
      "SunToolkit.PostEventQueue-0" (TID:0x40b5f8, sys_thread_t:0x40b530, state:CW,
      thread_t: t@12, threadID:0xe9cc1dd8, stack_bottom:0xe9cc2000,
      stack_size:0x20000) prio=5

      [1] java.lang.Object.wait(Object.java:424)
      [2] sun.awt.PostEventQueue.run(SunToolkit.java:407)
      -------------------
      "AWT-EventQueue-0" (TID:0x405690, sys_thread_t:0x4055c8, state:R, thread_t:
      t@11, threadID:0xe9cf1dd8, stack_bottom:0xe9cf2000, stack_size:0x20000) prio=6
      *current thread*

      [1] sun.awt.motif.X11Graphics.cacheInit(Native Method)
      [2] sun.awt.motif.X11Graphics.<clinit>(X11Graphics.java:105)
      [3] sun.awt.motif.MComponentPeer.getGraphics(MComponentPeer.java:349)
      [4] java.awt.Component.getGraphics(Component.java:1700)
      [5] sun.awt.motif.MComponentPeer.handleEvent(MComponentPeer.java:316)
      [6] java.awt.Component.dispatchEventImpl(Component.java:2452)
      [7] java.awt.Container.dispatchEventImpl(Container.java:1061)
      [8] java.awt.Window.dispatchEventImpl(Window.java:749)
      [9] java.awt.Component.dispatchEvent(Component.java:2312)
      [10] java.awt.EventQueue.dispatchEvent(EventQueue.java:301)
      [11] java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:101)
      [12] java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:91)
      [13] java.awt.EventDispatchThread.run(EventDispatchThread.java:83)
      -------------------
      -------------------

      Exiting Thread (sys_thread_t:0xef70c2e8) : no stack

      Exiting Thread (sys_thread_t:0x2e8240) : no stack

      Exiting Thread (sys_thread_t:0x2e8028) : no stack

      Exiting Thread (sys_thread_t:0x2e7e10) : no stack
      "Finalizer" (TID:0x156e80, sys_thread_t:0x156db8, state:CW, thread_t: t@6,
      threadID:0xef0d1dd8, stack_bottom:0xef0d2000, stack_size:0x20000) prio=8

      [1] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:146)
      [2] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:168)
      [3] java.lang.ref.Finalizer$FinalizerWorker$FinalizerThread.run
      (Finalizer.java:124)
      -------------------
      "Reference Handler" (TID:0x14faa0, sys_thread_t:0x14f9d8, state:CW, thread_t:
      t@5, threadID:0xef101dd8, stack_bottom:0xef102000, stack_size:0x20000) prio=10

      [1] java.lang.Object.wait(Object.java:424)
      [2] java.lang.ref.Reference$ReferenceHandler.run(Reference.java:130)
      -------------------
      "Signal dispatcher" (TID:0x12ba90, sys_thread_t:0x12b9c8, state:MW, thread_t:
      t@4, threadID:0xef141dd8, stack_bottom:0xef142000, stack_size:0x20000) prio=10

      -------------------
      Abort(coredump)
      (Review ID: 109356)
      ======================================================================
      Name: rlT66838 Date: 05/30/2000


      java version "1.2.2"
      Solaris VM (build Solaris_JDK_1.2.2_05a, native threads, sunwjit)


      This appears to be a regression of bug 4219633 (duplicate of 4219215, closed).

      I am building a simple JComboBox. The attached code is simplified from
      the Java Tutorial example ComboBoxDemo.java. This code causes a SEGV.
      The SEGV is hard to reproduce -- happens only about one time out of ten.

      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;

      public class Combo extends JPanel
      {
         public static void main( String s[])
         {
            // Create the frame.
            JFrame frame = new JFrame( "Combo" );
            frame.addWindowListener( new WindowAdapter()
            { public void windowClosing( WindowEvent e )
               { System.exit( 0 );
               }
            });
       
            // Create the combo box.
            String[] petStrings = { "Bird", "Cat", "Dog", "Rabbit", "Pig" };
            JComboBox petList = new JComboBox( petStrings );
      // petList.setEditable( true );
            frame.getContentPane().add( petList );

            // Show the frame.
            frame.pack();
            frame.setVisible( true );
         }
      }


      The SEGV traceback varies but is usually like the following:

      > java Combo
      SIGSEGV 11 segmentation violation
          si_signo [11]: SEGV
          si_errno [0]:
          si_code [1]: SEGV_MAPERR [addr: 0x34]

              stackpointer=EAAEFAA0
      "Screen Updater" (TID:0x6ff550, sys_thread_t:0x6ff490, state:CW, thread_t: t@11,
      threadID:0xe9dc1dd8, stack_bottom:0xe9dc2000, stack_size:0x20000) prio=4

      [1] java.lang.Object.wait(Object.java:424)
      [2] sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:78)
      [3] sun.awt.ScreenUpdater.run(ScreenUpdater.java:98)
      -------------------

      Exiting Thread (sys_thread_t:0xef6ef2d8) : no stack
      "AWT-Motif" (TID:0x42aeb8, sys_thread_t:0x42adf8, state:R, thread_t: t@9,
      threadID:0xe9ff1dd8, stack_bottom:0xe9ff2000, stack_size:0x20000) prio=5

      [1] sun.awt.motif.MToolkit.run(Native Method)
      [2] java.lang.Thread.run(Thread.java:479)
      -------------------
      "SunToolkit.PostEventQueue-0" (TID:0x4065e8, sys_thread_t:0x406528, state:CW,
      thread_t: t@8, threadID:0xeaac1dd8, stack_bottom:0xeaac2000, stack_size:0x20000)
      prio=5

      [1] java.lang.Object.wait(Object.java:424)
      [2] sun.awt.PostEventQueue.run(SunToolkit.java:407)
      -------------------
      "AWT-EventQueue-0" (TID:0x3e9a30, sys_thread_t:0x3e9970, state:R, thread_t: t@7,
      threadID:0xeaaf1dd8, stack_bottom:0xeaaf2000, stack_size:0x20000) prio=6
      *current thread*

      [1] sun.awt.motif.X11Graphics.X11LockViewResources(Native Method)
      [2] sun.awt.motif.X11Graphics.lock(X11Graphics.java:847)
      [3] sun.java2d.loops.LockableRaster.<init>(LockableRaster.java:91)
      [4]
      sun.java2d.loops.RasterOutputManager$RenderImageCachedState.getDstLR(RasterOutputManager.java:368)
      [5]
      sun.java2d.loops.RasterOutputManager.renderImage(RasterOutputManager.java:479)
      [6] sun.java2d.SunGraphics2D.renderingPipeImage(SunGraphics2D.java:2024)
      [7] sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:1633)
      [8] sun.awt.motif.X11Graphics.drawImage(X11Graphics.java:591)
      [9] javax.swing.JComponent.paint(JComponent.java:548)
      [10] java.awt.Container.paint(Container.java:759)
      [11] javax.swing.JFrame.update(JFrame.java:261)
      [12] sun.awt.motif.MComponentPeer.handleEvent(MComponentPeer.java:324)
      [13] java.awt.Component.dispatchEventImpl(Component.java:2452)
      [14] java.awt.Container.dispatchEventImpl(Container.java:1061)
      [15] java.awt.Window.dispatchEventImpl(Window.java:749)
      [16] java.awt.Component.dispatchEvent(Component.java:2312)
      [17] java.awt.EventQueue.dispatchEvent(EventQueue.java:296)
      [18] java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:100)
      [19] java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:91)
      [20] java.awt.EventDispatchThread.run(EventDispatchThread.java:83)
      -------------------
      "Finalizer" (TID:0x151a88, sys_thread_t:0x1519c8, state:CW, thread_t: t@6,
      threadID:0xef0f1dd8, stack_bottom:0xef0f2000, stack_size:0x20000) prio=8

      [1] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:146)
      [2] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:168)
      [3]
      java.lang.ref.Finalizer$FinalizerWorker$FinalizerThread.run(Finalizer.java:124)
      -------------------
      "Reference Handler" (TID:0x14f698, sys_thread_t:0x14f5d8, state:CW, thread_t:
      t@5, threadID:0xef131dd8, stack_bottom:0xef132000, stack_size:0x20000) prio=10

      [1] java.lang.Object.wait(Object.java:424)
      [2] java.lang.ref.Reference$ReferenceHandler.run(Reference.java:130)
      -------------------
      "Signal dispatcher" (TID:0x130d78, sys_thread_t:0x130cb8, state:MW, thread_t:
      t@4, threadID:0xef161dd8, stack_bottom:0xef162000, stack_size:0x20000) prio=10

      -------------------
      "main" (TID:0x387e8, sys_thread_t:0x38728, state:R, thread_t: t@1,
      threadID:0x25118, stack_bottom:0xf0000000, stack_size:0x20000) prio=5

      [1] java.awt.Component.show(Component.java:806)
      [2] java.awt.Window.show(Window.java:289)
      [3] java.awt.Component.show(Component.java:835)
      [4] java.awt.Component.setVisible(Component.java:797)
      [5] Combo.main(Combo.java:25)
      -------------------
      Abort
      (Review ID: 105492)
      ======================================================================

      Name: ks88420 Date: 08/24/2000


      java version "1.2.2" Solaris VM (build
                       Solaris_JDK_1.2.2_05, native threads, sunwjit)



      The program is crashing in the UIManager.setLookAndFeel()
           call with the following output:

      > java polos.PUI motif
      ==> using MOTIF Look&Feel
      SIGSEGV 11 segmentation violation
          si_signo [11]: SEGV
          si_errno [0]:
          si_code [1]: SEGV_MAPERR [addr: 0x70616d7c]

              stackpointer=8045834
      "Finalizer" (TID:0x816d56c, sys_thread_t:0x816d4b8, state:CW, thread_t: t@6,
      threadID:0xdeb70d74,
      stack_bottom:0xdeb71000, stack_size:0x20000) prio=8

      [1] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:146)
      [2] java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:168)
      [3] java.lang.ref.Finalizer$FinalizerWorker$FinalizerThread.run
      (Finalizer.java:124)
      -------------------
      "Reference Handler" (TID:0x816b58c, sys_thread_t:0x816b4d8, state:CW, thread_t:
      t@5,
      threadID:0xdeba0d74, stack_bottom:0xdeba1000, stack_size:0x20000) prio=10

      [1] java.lang.Object.wait(Object.java:424)
      [2] java.lang.ref.Reference$ReferenceHandler.run(Reference.java:130)
      -------------------
      "Signal dispatcher" (TID:0x814fa6c, sys_thread_t:0x814f9b8, state:MW, thread_t:
      t@4,
      threadID:0xdebf0d74, stack_bottom:0xdebf1000, stack_size:0x20000) prio=10

      -------------------
      "main" (TID:0x805f63c, sys_thread_t:0x805f588, state:R, thread_t: t@1,
      threadID:0x804c058,
      stack_bottom:0x8048000, stack_size:0x20000) prio=5 *current thread*

      [1] sun.awt.X11GraphicsEnvironment.initCompositeFonts
      (X11GraphicsEnvironment.java:436)
      [2] sun.java2d.SunGraphicsEnvironment$1.run(SunGraphicsEnvironment.java:85)
      [3] java.security.AccessController.doPrivileged(Native Method)
      [4] sun.java2d.SunGraphicsEnvironment.<init>(SunGraphicsEnvironment.java:73)
      [5] sun.awt.X11GraphicsEnvironment.<init>(X11GraphicsEnvironment.java:68)
      [6] java.lang.Class.newInstance0(Native Method)
      [7] java.lang.Class.newInstance(Class.java:238)
      [8] java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment
      (GraphicsEnvironment.java:63)
      [9] java.awt.Font.initializeFont(Font.java:262)
      [10] java.awt.Font.<init>(Font.java:292)
      [11] javax.swing.plaf.FontUIResource.<init>(FontUIResource.java:41)
      [12] javax.swing.plaf.basic.BasicLookAndFeel.initComponentDefaults
      (BasicLookAndFeel.java:223)
      [13] com.sun.java.swing.plaf.motif.MotifLookAndFeel.initComponentDefaults
      (MotifLookAndFeel.java:185)
      [14] javax.swing.plaf.basic.BasicLookAndFeel.getDefaults
      (BasicLookAndFeel.java:65)
      [15] javax.swing.UIManager.setLookAndFeel(UIManager.java:363)
      [16] polos.PUI.doScreen(PUI.java:52)
      [17] polos.PUI.main(PUI.java:117)
      -------------------
      Abort (core dumped)

          When no LookAndFeel is specified, the program crashes with
          the following output: (no core dump, must hit ^C to end)

      > java polos.PUI
      ==> using DEFAULT Look&Feel
      Done setting Look&Feel
      SIGSEGV 11 segmentation violation
          si_signo [11]: SEGV
          si_errno [0]:
          si_code [1]: SEGV_MAPERR [addr: 0x31582f35]

              stackpointer=804615C
      "Finalizer" (TID:0x81725cc, sys_thread_t:0x8172518, state:CW, thread_t: t@6,
      threadID:0xdeb70d74,
      stack_bottom:0xdeb71000, stack_size:0x20000) prio=8

      The attached Java program runs fine on Solaris 2.8 with java 1.2.2 but crashes
      on the intel solaris 2.8 with java 1.2.2

      PFrame.java (3KB)

      package polos;

      // Java imports
      import java.io.FileInputStream;

      // Java AWT imports
      import java.awt.BorderLayout;
      import java.awt.Dimension;
      import java.awt.Toolkit;
      import java.awt.Container;
      import java.awt.Image;
      import java.awt.event.ActionListener;
      import java.awt.event.ActionEvent;

      // Java swing imports
      import javax.swing.JScrollPane;
      import javax.swing.JComponent;
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.JButton;
      import javax.swing.ImageIcon;
      import javax.swing.JTextArea;


      public class PFrame extends JFrame
      {

          // attributes
          private Container m_contentPane;
          private JPanel m_controlPanel;
          private JPanel m_buttonPanel;

          public PFrame()
          {
              setSize(600,400);
              setTitle("PFrame Title Bar");

              m_contentPane = getContentPane();
              m_contentPane.setLayout(new BorderLayout());
              m_buttonPanel = new JPanel();
              m_controlPanel = new JPanel();
              //m_controlPanel.setLayout(new BorderLayout());
         }



          /**
           * doPage
           * Creates, displays, and supports the GUI Page
           *
           * @param none
           * @return nothing
           */
          public void doPage()
          {
               /* add the control panel */
               m_contentPane.add(m_controlPanel, BorderLayout.CENTER);

               /* add the button panel to the main frame */
               m_contentPane.add(m_buttonPanel, BorderLayout.SOUTH);

               /* center on frame on screen. */
               centerOnScreen(this);

               /* show the frame */
               pack();
               setVisible(true);
         }


          public void addIconImage(String gif)
          {
              java.net.URL loc = this.getClass().getResource(gif);
              ImageIcon icFrame = new ImageIcon(loc);

              this.setIconImage(icFrame.getImage());
          }


          public void addText(String txtToDisplay, boolean isFile)
          {
              String txt;
              JPanel controlPanel;
              JTextArea textArea;
              JScrollPane scrollPane;

              if (isFile)
              {
                  txt = getTextFromFile(txtToDisplay);
              }
              else
              {
                  txt = txtToDisplay;
              }

              textArea = new JTextArea(txt)
              {
                  public boolean isFocusTraversable()
                  {
                      return false;
                  }
              };
              textArea.setBackground(getBackground());
              textArea.setWrapStyleWord(true);
              textArea.setLineWrap(true);
              textArea.setEditable(false);

              scrollPane = new JScrollPane(textArea);
              scrollPane.setPreferredSize(new Dimension(575,375));

              m_controlPanel.removeAll();
              m_controlPanel.add(scrollPane);
          }


          public void addButton(JButton button, boolean isDefault)
          {
              m_buttonPanel.add(button);
              if (isDefault)
              {
                  rootPane.setDefaultButton(button);
                  button.grabFocus();
              }
          }

          private String getTextFromFile(String file)
          {
              FileInputStream fis;
              byte[] data = new byte[1024];
              String txt = "";
              int rc;

              try
              {
                  fis = new FileInputStream(file);
                  while ((rc = fis.read(data)) != -1)
                  {
                      txt += new String(data,0,rc);
                  }
              }
              catch (Exception e)
              {
                  txt = "Could not read data from file: " + file;
              }

              return txt;
          }


          /**
           * center the window on the screen
           */
          private static void centerOnScreen(JFrame frame)
          {
              Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
              Dimension window = frame.getSize();
              int iCenterX = screen.width / 2;
              int iCenterY = screen.height / 2;
              frame.setLocation(iCenterX - (window.width / 2),
                                iCenterY - (window.height / 2));
          }

      } // end GUIHelp class




      PUI.java (3Kb)

      package polos;


      // Java imports
      import java.io.*;
      import java.util.*;
      import java.lang.System;

      // Java AWT imports
      import java.awt.event.ActionListener;
      import java.awt.event.ActionEvent;

      // Java swing imports
      import javax.swing.JButton;
      import javax.swing.JTextArea;
      import javax.swing.UIManager;

      // Java com.sun imports
      import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
      import com.sun.java.swing.plaf.motif.MotifLookAndFeel;
      import javax.swing.plaf.metal.MetalLookAndFeel;

      // Other imports
      import polos.PFrame;

      public class PUI implements ActionListener
      {
          // constants
          static public final int EXIT = -1;
          static public final int CANCEL = 0;

          // attributes
          PFrame pFrame = null;


          public PUI()
          {
          }

          public void doScreen(String lookAndFeel)
          {
              try
              {
                  if (lookAndFeel.toLowerCase().equals("windows"))
                  {
                      System.out.println("==> using WINDOWS Look&Feel");
                      UIManager.setLookAndFeel(new WindowsLookAndFeel());
                  }
                  else if (lookAndFeel.toLowerCase().equals("motif"))
                  {
                      System.out.println("==> using MOTIF Look&Feel");
                      UIManager.setLookAndFeel(new MotifLookAndFeel());
                  }
                  else if (lookAndFeel.toLowerCase().equals("metal"))
                  {
                      System.out.println("==> using METAL Look&Feel");
                      UIManager.setLookAndFeel(new MetalLookAndFeel());
                  }
                  else
                  {
                      System.out.println("==> using DEFAULT Look&Feel");
                  }
              }
              catch (Exception e)
              {
                  System.out.println("PUI-caught exception: " + e.getMessage());
              }
              System.out.println("Done setting Look&Feel");

              createPFrame();
              pFrame.doPage();
          }

          private void createPFrame()
          {
              // instanstiate a PFrame
              pFrame = new PFrame();

              // Create the exit button
              JButton exit = new JButton("EXIT");
              exit.addActionListener(
                  new ActionListener()
                  {
                      public void actionPerformed(ActionEvent actionEvent)
                      {
                          pFrame.dispose();
                          System.exit(0);
                      }
                  }
              );
              pFrame.addButton(exit,true);

              // Create the text field
              pFrame.addText("TestFile",true);

              // Add the icon image
              pFrame.addIconImage("/com/basis/install/gui/BBjReg.gif");
          }


          public void actionPerformed(ActionEvent actionEvent)
          {
               /* get the src of the action event */
               Object src = actionEvent.getSource();
          }


          public static void main(Str

            kizune Alexander Zuev
            rlewis Roger Lewis (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: