diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index 2baced1f001..11165dd7b34 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,15 @@ +2003-11-19 Mikhail Khodjaiants + + Fix for PR 45533: MIException while creating MISession can leave an orphan gdb process. + * src/org/eclipse/cdt/debug/mi/core/MIPlugin.java: removed the 'getAdjustedTimeout' method. + +2003-11-19 Mikhail Khodjaiants + + Fix for PR 45533: MIException while creating MISession can leave an orphan gdb process. + * src/org/eclipse/cdt/debug/mi/core/MIPlugin.java: initialization of preferences by default values. + * src/org/eclipse/cdt/debug/mi/core/MISession.java: removed the duplicate constant for the default + launch timeout value. + 2003-11-13 Mikhail Khodjaiants * src/org/eclipse/cdt/debug/mi/core/output/MIFrame.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java index 0fc77d809e5..3ff5eda8587 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MIPlugin.java @@ -289,27 +289,6 @@ public class MIPlugin extends Plugin { } } - /** - * Retrieve the session timeout. - * - * Allow at least one second per megabyte as a minimum on the timeout - * (note one second is an arbitrary choice based on swapping performance). - * This is required for loading the symbols from very large programs. - */ - private int getAdjustedTimeout(File program) { - Preferences prefs = plugin.getPluginPreferences(); - int timeout = prefs.getInt(IMIConstants.PREF_REQUEST_TIMEOUT); //milliseconds - if(program != null && program.exists()) { - long programSize = program.length(); - int minimumTimeout = (int)(programSize / 1000L); - if(timeout < minimumTimeout) { - //debugLog("Adjusting timeout from " + timeout + "ms to " + minimumTimeout + "ms"); - timeout = minimumTimeout; - } - } - return timeout; - } - /** * Do some basic synchronisation, gdb make take some time to load * for whatever reasons. @@ -348,9 +327,6 @@ public class MIPlugin extends Plugin { MIPlugin plugin = getDefault(); Preferences prefs = plugin.getPluginPreferences(); int launchTimeout = prefs.getInt(IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT); - if (launchTimeout <= 0) { - launchTimeout = getAdjustedTimeout(program); - } while (syncStartup.isAlive()) { try { pgdb.wait(launchTimeout); @@ -378,7 +354,8 @@ public class MIPlugin extends Plugin { * @see org.eclipse.core.runtime.Plugin#initializeDefaultPluginPrefrences() */ protected void initializeDefaultPluginPreferences() { - getPluginPreferences().setDefault(IMIConstants.PREF_REQUEST_TIMEOUT, MISession.REQUEST_TIMEOUT); + getPluginPreferences().setDefault(IMIConstants.PREF_REQUEST_TIMEOUT, IMIConstants.DEF_REQUEST_TIMEOUT); + getPluginPreferences().setDefault(IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT, IMIConstants.DEF_REQUEST_LAUNCH_TIMEOUT); } /* (non-Javadoc) diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java index 67cb613ab26..9cc6f531a7d 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java @@ -44,11 +44,6 @@ public class MISession extends Observable { */ public final static int CORE = 2; - /** - * Default wait() period for an answer after a query, 10 seconds. - */ - public static long REQUEST_TIMEOUT = 10000; // 10 * 1000 (~ 10 secs); - boolean terminated; // hold the type of the session(post-mortem, attach etc ..) diff --git a/debug/org.eclipse.cdt.debug.mi.ui/ChangeLog b/debug/org.eclipse.cdt.debug.mi.ui/ChangeLog index 19e45664af6..62a5833c145 100644 --- a/debug/org.eclipse.cdt.debug.mi.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.ui/ChangeLog @@ -1,3 +1,16 @@ +2003-11-19 Mikhail Khodjaiants + + Fix for PR 45533: MIException while creating MISession can leave an orphan gdb process. + * src/org/eclipse/cdt/debug/mi/internal/ui/preferences/MIPreferencePage.java: + added a text field for the launch timeout. + +2003-11-06 Alain Magloire + + Patch from Ashish Karkare(TimeSys) + *src/org/eclipse/cdt/debug/mi/internal/ui/GDBServerDebuggerPage.java + Add a new Combo that helps select a reasonable line speed, and storing + the selected value as a configuration attribute. + 2003-09-29 Mikhail Khodjaiants Improved the layout of the 'Shared Libraries' component. * SolibSearchPathBlock.java diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/GDBServerDebuggerPage.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/GDBServerDebuggerPage.java index 0b8f65d6c94..b29cd7c665a 100644 --- a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/GDBServerDebuggerPage.java +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/GDBServerDebuggerPage.java @@ -25,6 +25,7 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; @@ -37,6 +38,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { protected Text fHostText; protected Text fHostPort; protected Text fAsyncDev; + protected Combo fAsyncDevSpeedCombo; private Button fAutoSoLibButton; public void createControl(Composite parent) { @@ -83,6 +85,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { fAsyncButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fAsyncDev.setEnabled(fAsyncButton.getSelection()); + fAsyncDevSpeedCombo.setEnabled(fAsyncButton.getSelection()); updateLaunchConfigurationDialog(); } }); @@ -112,6 +115,8 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { } }); + + Label asyncDevLabel= new Label(comp, SWT.NONE); asyncDevLabel.setText("Serial device:"); @@ -124,6 +129,26 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { } }); + Label asyncDevSpeedLabel= new Label(comp, SWT.NONE); + asyncDevSpeedLabel.setText("Serial speed:"); + + + fAsyncDevSpeedCombo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY); + String choices [] = {"9600", "19200","38400", "57600", "115200"}; + fAsyncDevSpeedCombo.setItems(choices); + fAsyncDevSpeedCombo.select(choices.length-1); + + gd = new GridData(GridData.FILL_HORIZONTAL); + fAsyncDevSpeedCombo.setLayoutData(gd); + fAsyncDevSpeedCombo.addSelectionListener(new SelectionAdapter() { + + public void widgetSelected(SelectionEvent arg0) { + + updateLaunchConfigurationDialog(); + + } + }); + fTCPButton.setSelection(true); fAsyncButton.setSelection(false); fHostText.setEnabled(true); @@ -131,7 +156,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { fAsyncDev.setEnabled(false); fHostPort.setEnabled(true); fHostText.setEnabled(true); - fAsyncDev.setEnabled(false); + fAsyncDevSpeedCombo.setEnabled(false); createVerticalSpacer(comp, 2); @@ -212,6 +237,14 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { if (attr == null) { configuration.setAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV, "/dev/ttyS0"); } + attr = null; + try { + attr = configuration.getAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV_SPEED, (String) null); + } catch (CoreException e) { + } + if (attr == null) { + configuration.setAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV_SPEED, "115200"); + } } /** @@ -236,9 +269,9 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { setMessage(null); } } else { - valid = fAsyncDev.getText().length() != 0; + valid = ((fAsyncDev.getText().length() != 0) && (fAsyncDevSpeedCombo.getSelectionIndex()!=-1)) ; if (!valid) { - setErrorMessage("If Async is selected, device must be specified"); + setErrorMessage("If Async is selected, device and speed must be specified"); setMessage(null); } } @@ -253,6 +286,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { String hostText = ""; String hostPort = ""; String asyncDev = "/dev/ttyS0"; + String asyncDevSpeed = "115200"; boolean autosolib = false; try { debuggerCommand = configuration.getAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEBUG_NAME, "gdb"); @@ -264,6 +298,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { hostText = configuration.getAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_HOST, ""); hostPort = configuration.getAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_PORT, ""); asyncDev = configuration.getAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV, ""); + asyncDevSpeed = configuration.getAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV_SPEED, ""); } catch (CoreException e) { } fDebuggerCommandText.setText(debuggerCommand); @@ -272,9 +307,11 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { fHostText.setText(hostText); fHostPort.setText(hostPort); fAsyncDev.setText(asyncDev); + fAsyncDevSpeedCombo.select(fAsyncDevSpeedCombo.indexOf(asyncDevSpeed)); fHostText.setEnabled(isTcp); fHostPort.setEnabled(isTcp); fAsyncDev.setEnabled(!isTcp); + fAsyncDevSpeedCombo.setEnabled(!isTcp); fAutoSoLibButton.setSelection(autosolib); } @@ -283,6 +320,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { String hostText = fHostText.getText(); String hostPort = fHostPort.getText(); String asyncDev = fAsyncDev.getText(); + String asyncDevSpeed = fAsyncDevSpeedCombo.getItem(fAsyncDevSpeedCombo.getSelectionIndex()); debuggerCommand.trim(); hostText.trim(); hostPort.trim(); @@ -293,6 +331,7 @@ public class GDBServerDebuggerPage extends AbstractLaunchConfigurationTab { configuration.setAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_HOST, hostText); configuration.setAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_PORT, hostPort); configuration.setAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV, asyncDev); + configuration.setAttribute(IGDBServerMILaunchConfigurationConstants.ATTR_DEV_SPEED, asyncDevSpeed); } public String getName() { diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/preferences/MIPreferencePage.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/preferences/MIPreferencePage.java index 14338bfc538..460b4c67532 100644 --- a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/preferences/MIPreferencePage.java +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/preferences/MIPreferencePage.java @@ -36,8 +36,11 @@ import org.eclipse.ui.help.WorkbenchHelp; */ public class MIPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - // Timeout preference widgets - IntegerFieldEditor fTimeoutText; + // Debugger timeout preference widgets + IntegerFieldEditor fDebugTimeoutText; + + // Launch timeout preference widgets + IntegerFieldEditor fLaunchTimeoutText; /** * Constructor for MIPreferencePage. @@ -95,7 +98,8 @@ public class MIPreferencePage extends PreferencePage implements IWorkbenchPrefer */ private void setValues() { - fTimeoutText.setStringValue( new Integer( MIPlugin.getDefault().getPluginPreferences().getInt( IMIConstants.PREF_REQUEST_TIMEOUT ) ).toString() ); + fDebugTimeoutText.setStringValue( new Integer( MIPlugin.getDefault().getPluginPreferences().getInt( IMIConstants.PREF_REQUEST_TIMEOUT ) ).toString() ); + fLaunchTimeoutText.setStringValue( new Integer( MIPlugin.getDefault().getPluginPreferences().getInt( IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT ) ).toString() ); } /** @@ -121,7 +125,8 @@ public class MIPreferencePage extends PreferencePage implements IWorkbenchPrefer private void setDefaultValues() { - fTimeoutText.setStringValue( new Integer( IMIConstants.DEF_REQUEST_TIMEOUT ).toString() ); + fDebugTimeoutText.setStringValue( new Integer( IMIConstants.DEF_REQUEST_TIMEOUT ).toString() ); + fLaunchTimeoutText.setStringValue( new Integer( IMIConstants.DEF_REQUEST_LAUNCH_TIMEOUT ).toString() ); } /* (non-Javadoc) @@ -150,25 +155,25 @@ public class MIPreferencePage extends PreferencePage implements IWorkbenchPrefer data.horizontalSpan = 2; spacingComposite.setLayoutData( data ); - fTimeoutText = new IntegerFieldEditor( IMIConstants.PREF_REQUEST_TIMEOUT, "Debugger &timeout (ms):", spacingComposite ); - data = new GridData(); - data.widthHint = convertWidthInCharsToPixels( 10 ); - fTimeoutText.getTextControl( spacingComposite ).setLayoutData( data ); - fTimeoutText.setPreferenceStore( MIUIPlugin.getDefault().getPreferenceStore() ); - fTimeoutText.setPreferencePage( this ); - fTimeoutText.setValidateStrategy( StringFieldEditor.VALIDATE_ON_KEY_STROKE ); - fTimeoutText.setValidRange( IMIConstants.MIN_REQUEST_TIMEOUT, IMIConstants.MAX_REQUEST_TIMEOUT ); - String minValue = Integer.toString( IMIConstants.MIN_REQUEST_TIMEOUT ); - String maxValue = Integer.toString( IMIConstants.MAX_REQUEST_TIMEOUT ); - fTimeoutText.setErrorMessage( MessageFormat.format( "The valid value range is [{0},{1}].", new String[]{ minValue, maxValue } ) ); - fTimeoutText.load(); - fTimeoutText.setPropertyChangeListener( + fDebugTimeoutText = createTimeoutField( IMIConstants.PREF_REQUEST_TIMEOUT, "&Debugger timeout (ms):", spacingComposite ); + fDebugTimeoutText.setPropertyChangeListener( new IPropertyChangeListener() { public void propertyChange( PropertyChangeEvent event ) { if ( event.getProperty().equals( FieldEditor.IS_VALID ) ) - setValid( fTimeoutText.isValid() ); + setValid( fDebugTimeoutText.isValid() ); + } + } ); + + fLaunchTimeoutText = createTimeoutField( IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT, "&Launch &timeout (ms):", spacingComposite ); + fLaunchTimeoutText.setPropertyChangeListener( + new IPropertyChangeListener() + { + public void propertyChange( PropertyChangeEvent event ) + { + if ( event.getProperty().equals( FieldEditor.IS_VALID ) ) + setValid( fLaunchTimeoutText.isValid() ); } } ); } @@ -179,6 +184,24 @@ public class MIPreferencePage extends PreferencePage implements IWorkbenchPrefer */ private void storeValues() { - MIPlugin.getDefault().getPluginPreferences().setValue( IMIConstants.PREF_REQUEST_TIMEOUT, fTimeoutText.getIntValue() ); + MIPlugin.getDefault().getPluginPreferences().setValue( IMIConstants.PREF_REQUEST_TIMEOUT, fDebugTimeoutText.getIntValue() ); + MIPlugin.getDefault().getPluginPreferences().setValue( IMIConstants.PREF_REQUEST_LAUNCH_TIMEOUT, fLaunchTimeoutText.getIntValue() ); + } + + private IntegerFieldEditor createTimeoutField( String preference, String label, Composite parent ) + { + IntegerFieldEditor toText = new IntegerFieldEditor( preference, label, parent ); + GridData data = new GridData(); + data.widthHint = convertWidthInCharsToPixels( 10 ); + toText.getTextControl( parent ).setLayoutData( data ); + toText.setPreferenceStore( MIUIPlugin.getDefault().getPreferenceStore() ); + toText.setPreferencePage( this ); + toText.setValidateStrategy( StringFieldEditor.VALIDATE_ON_KEY_STROKE ); + toText.setValidRange( IMIConstants.MIN_REQUEST_TIMEOUT, IMIConstants.MAX_REQUEST_TIMEOUT ); + String minValue = Integer.toString( IMIConstants.MIN_REQUEST_TIMEOUT ); + String maxValue = Integer.toString( IMIConstants.MAX_REQUEST_TIMEOUT ); + toText.setErrorMessage( MessageFormat.format( "The valid value range is [{0},{1}].", new String[]{ minValue, maxValue } ) ); + toText.load(); + return toText; } }