Should fix bug 434 <http://helma.org/bugs/show_bug.cgi?id=434>
* Synchronize all methods that call/rely on update(). * Make sure repositories and resources are not null after update() has been called.
This commit is contained in:
parent
bea4c3a5b7
commit
37e51812d6
3 changed files with 12 additions and 7 deletions
|
@ -97,7 +97,7 @@ public abstract class AbstractRepository implements Repository {
|
|||
* If the name can't be resolved to a resource, a resource object is returned
|
||||
* for which {@link Resource exists()} returns <code>false<code>.
|
||||
*/
|
||||
public Resource getResource(String name) {
|
||||
public synchronized Resource getResource(String name) {
|
||||
update();
|
||||
|
||||
Resource res = (Resource) resources.get(name);
|
||||
|
@ -112,7 +112,7 @@ public abstract class AbstractRepository implements Repository {
|
|||
/**
|
||||
* Get an iterator over the resources contained in this repository.
|
||||
*/
|
||||
public Iterator getResources() {
|
||||
public synchronized Iterator getResources() {
|
||||
update();
|
||||
|
||||
return resources.values().iterator();
|
||||
|
@ -121,7 +121,7 @@ public abstract class AbstractRepository implements Repository {
|
|||
/**
|
||||
* Get an iterator over the sub-repositories contained in this repository.
|
||||
*/
|
||||
public Repository[] getRepositories() {
|
||||
public synchronized Repository[] getRepositories() {
|
||||
update();
|
||||
|
||||
return repositories;
|
||||
|
@ -138,7 +138,7 @@ public abstract class AbstractRepository implements Repository {
|
|||
* Get a deep list of this repository's resources, including all resources
|
||||
* contained in sub-reposotories.
|
||||
*/
|
||||
public List getAllResources() throws IOException {
|
||||
public synchronized List getAllResources() throws IOException {
|
||||
update();
|
||||
|
||||
ArrayList allResources = new ArrayList();
|
||||
|
|
|
@ -115,7 +115,7 @@ public class FileRepository extends AbstractRepository {
|
|||
return directory.lastModified();
|
||||
}
|
||||
|
||||
public long getChecksum() throws IOException {
|
||||
public synchronized long getChecksum() throws IOException {
|
||||
// delay checksum check if already checked recently
|
||||
if (System.currentTimeMillis() > lastChecksumTime + cacheTime) {
|
||||
|
||||
|
@ -141,8 +141,11 @@ public class FileRepository extends AbstractRepository {
|
|||
public synchronized void update() {
|
||||
if (!directory.exists()) {
|
||||
repositories = new Repository[0];
|
||||
if (resources != null)
|
||||
if (resources != null) {
|
||||
resources = new HashMap();
|
||||
} else {
|
||||
resources.clear();
|
||||
}
|
||||
lastModified = 0;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -95,7 +95,9 @@ public final class ZipRepository extends AbstractRepository {
|
|||
}
|
||||
|
||||
public synchronized void update() {
|
||||
if (file.lastModified() != lastModified) {
|
||||
if (file.lastModified() != lastModified ||
|
||||
repositories == null ||
|
||||
resources == null) {
|
||||
lastModified = file.lastModified();
|
||||
ZipFile zipfile = null;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue