Made EmailExtracted class thread safe

This commit is contained in:
Eugene Livis 2016-06-27 17:16:54 -04:00
parent 4ad575ef41
commit f641128cb0

View File

@ -72,36 +72,34 @@ public class EmailExtracted implements AutopsyVisitableItem {
private final class EmailResults extends Observable {
// NOTE: "accounts" object can be accessed by multiple threads and needs to be synchronized
private final Map<String, Map<String, List<Long>>> accounts = new LinkedHashMap<>();
// "accounts" object can be accessed by multiple threads and needs to be protected with locks
private final Object accountsLock;
EmailResults() {
accountsLock = new Object();
update();
}
public Set<String> getAccounts() {
synchronized (accountsLock) {
synchronized (accounts) {
return accounts.keySet();
}
}
public Set<String> getFolders(String account) {
synchronized (accountsLock) {
synchronized (accounts) {
return accounts.get(account).keySet();
}
}
public List<Long> getArtifactIds(String account, String folder) {
synchronized (accountsLock) {
synchronized (accounts) {
return accounts.get(account).get(folder);
}
}
@SuppressWarnings("deprecation")
public void update() {
synchronized (accountsLock) {
synchronized (accounts) {
accounts.clear();
if (skCase == null) {
return;