Skip to content

Commit 6769513

Browse files
committed
fixes database reopening problem due to locking
1 parent f64a1ba commit 6769513

File tree

9 files changed

+83
-5
lines changed

9 files changed

+83
-5
lines changed

plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/IWaveformDb.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,13 @@ public interface IWaveformDb extends IHierNode {
6262
*/
6363
public boolean isLoaded();
6464

65+
/**
66+
* close an open database.
67+
*
68+
* @param inp the inp
69+
* @return true, if successful
70+
*/
71+
public void close();
72+
73+
6574
}

plugins/com.minres.scviewer.database/src/com/minres/scviewer/database/internal/WaveformDb.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.LinkedList;
1919
import java.util.List;
2020
import java.util.Map;
21+
import java.util.Map.Entry;
2122
import java.util.concurrent.ConcurrentHashMap;
2223

2324
import org.slf4j.Logger;
@@ -39,6 +40,7 @@ public class WaveformDb extends HierNode implements IWaveformDb, PropertyChangeL
3940
/** The loaders. */
4041
private static List<IWaveformDbLoaderFactory> loaderFactories = new LinkedList<>();
4142

43+
private List<IWaveformDbLoader> activeLoader = new ArrayList<>();
4244
/** The loaded. */
4345
private boolean loaded;
4446

@@ -136,6 +138,7 @@ public boolean load(File inp) {
136138
loader.addPropertyChangeListener(this);
137139
try {
138140
loader.load(inp);
141+
activeLoader.add(loader);
139142
} catch (Exception e) {
140143
LOG.error("error loading file "+inp.getName(), e);
141144
retval=false;
@@ -158,6 +161,12 @@ public boolean load(File inp) {
158161
return retval;
159162
}
160163

164+
@Override
165+
public void close() {
166+
for (IWaveformDbLoader entry : activeLoader) {
167+
entry.dispose();
168+
}
169+
}
161170
/**
162171
* Gets the file basename.
163172
*

plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/elements/RelationTypeToolControl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ protected void checkSelection(ISelection selection) {
124124
return;
125125
}
126126
}
127-
if(comboViewer!=null) comboViewer.getCombo().setEnabled(false);
127+
if(comboViewer!=null && !comboViewer.getCombo().isDisposed()) comboViewer.getCombo().setEnabled(false);
128128
}
129129

130130
/* (non-Javadoc)

plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/AddSeparatorHandler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,12 @@ public Boolean canExecute(EPartService partService){
3535
Object sel = ((WaveformViewer)part.getObject()).getSelection();
3636
if( sel instanceof IStructuredSelection) {
3737
if(((IStructuredSelection)sel).isEmpty()) return false;
38-
Object o= ((IStructuredSelection)sel).getFirstElement();
39-
return o instanceof TrackEntry;
38+
IStructuredSelection isel = (IStructuredSelection) sel;
39+
if(isel.size()==1)
40+
return isel.getFirstElement() instanceof TrackEntry;
41+
else if(isel.size()==2) {
42+
return isel.toArray()[1] instanceof TrackEntry;
43+
}
4044
}
4145
}
4246
return false;

plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/handlers/SelectAllHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ public class SelectAllHandler {
2323
@CanExecute
2424
public boolean canExecute(EPartService partService) {
2525
MPart part = partService.getActivePart();
26-
return part.getObject() instanceof WaveformViewer;
26+
return part!=null && part.getObject() instanceof WaveformViewer;
2727
}
2828

2929
@Execute
3030
public void execute(EPartService partService) {
3131
MPart part = partService.getActivePart();
32-
if(part.getObject() instanceof WaveformViewer)
32+
if(part!=null && part.getObject() instanceof WaveformViewer)
3333
((WaveformViewer) part.getObject()).selectAll();
3434
}
3535

plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.regex.Pattern;
3030

3131
import javax.annotation.PostConstruct;
32+
import javax.annotation.PreDestroy;
3233
import javax.inject.Inject;
3334
import javax.inject.Named;
3435

@@ -512,6 +513,12 @@ public boolean createContent(Composite parent, Point pt) {
512513
showTxDetails(false);
513514
}
514515

516+
@PreDestroy
517+
public void closeDatabase() {
518+
if(database.isLoaded())
519+
database.close();
520+
}
521+
515522
@Inject
516523
@Optional
517524
public void reactOnPrefsChange(@Preference(nodePath = PreferenceConstants.PREFERENCES_SCOPE) IEclipsePreferences prefs) {
-626 Bytes
Binary file not shown.
19 Bytes
Binary file not shown.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#Written by SCViewer
2+
#Wed Mar 01 08:49:19 CET 2023
3+
SHOWN_WAVEFORM0=tr.addr_ack
4+
SHOWN_WAVEFORM2=tr.bus_addr[7\:0]
5+
SHOWN_WAVEFORM1=tr.addr_req
6+
SHOWN_WAVEFORM7=tr.rw
7+
SHOWN_WAVEFORM5.WAVEFORM_TYPE=SIGNAL
8+
SHOWN_WAVEFORM4=tr.bus_data[7\:0]
9+
SHOWN_WAVEFORM3=Blank
10+
SHOWN_WAVEFORM6=tr.data_rdy
11+
SHOWN_WAVEFORM5=tr.clk
12+
SHOWN_CURSOR1=100000000
13+
SHOWN_CURSOR0=10000000
14+
SHOWN_WAVEFORM0.WAVEFORM_TYPE=SIGNAL
15+
SHOWN_WAVEFORM5.VALUE_DISPLAY=DEFAULT
16+
SHOWN_WAVEFORM0.VALUE_DISPLAY=DEFAULT
17+
SHOWN_WAVEFORMS=8
18+
SCALING_FACTOR=1000000
19+
SHOWN_CURSORS=2
20+
SHOWN_WAVEFORM0.WAVEFORM_SELECTED=FALSE
21+
SHOWN_WAVEFORM7.WAVEFORM_SELECTED=FALSE
22+
SHOWN_WAVEFORM3.WAVEFORM_TYPE=EMPTY
23+
SHOWN_WAVEFORM2.WAVEFORM_TYPE=SIGNAL
24+
SHOWN_WAVEFORM6.VALUE_DISPLAY=DEFAULT
25+
SHOWN_WAVEFORM2.WAVEFORM_SELECTED=FALSE
26+
SHOWN_WAVEFORM4.WAVEFORM_TYPE=SIGNAL
27+
DATABASE_FILE0=/scratch/eyck/workarea/MINRES/SCViewer/tests/com.minres.scviewer.database.test/inputs/my_db.vcd
28+
SHOWN_WAVEFORM7.WAVE_DISPLAY=DEFAULT
29+
SHOWN_WAVEFORM7.VALUE_DISPLAY=DEFAULT
30+
SHOWN_WAVEFORM4.WAVEFORM_SELECTED=FALSE
31+
SHOWN_WAVEFORM5.WAVE_DISPLAY=DEFAULT
32+
DATABASE_FILES=1
33+
SHOWN_WAVEFORM1.WAVE_DISPLAY=DEFAULT
34+
SHOWN_WAVEFORM4.VALUE_DISPLAY=DEFAULT
35+
SHOWN_WAVEFORM5.WAVEFORM_SELECTED=FALSE
36+
SHOWN_WAVEFORM1.WAVEFORM_TYPE=SIGNAL
37+
SHOWN_WAVEFORM6.WAVEFORM_SELECTED=FALSE
38+
SHOWN_WAVEFORM6.WAVEFORM_TYPE=SIGNAL
39+
SHOWN_WAVEFORM1.WAVEFORM_SELECTED=FALSE
40+
SHOWN_WAVEFORM4.WAVE_DISPLAY=DEFAULT
41+
SHOWN_WAVEFORM1.VALUE_DISPLAY=DEFAULT
42+
SHOWN_WAVEFORM7.WAVEFORM_TYPE=SIGNAL
43+
TX_DETAILS_SHOWN=false
44+
SHOWN_WAVEFORM2.VALUE_DISPLAY=DEFAULT
45+
SHOWN_WAVEFORM2.WAVE_DISPLAY=DEFAULT
46+
SHOWN_WAVEFORM0.WAVE_DISPLAY=DEFAULT
47+
SHOWN_WAVEFORM6.WAVE_DISPLAY=DEFAULT
48+
BASE_LINE_TIME=0
49+
SHOWN_WAVEFORM3.WAVEFORM_SELECTED=TRUE

0 commit comments

Comments
 (0)