private final void add(final SongDataEntry songdata) {
		final Path path = songdata.getPath();
		final DirTree t = walkTo(path.getParent());
		if (t == null) {
			return;
		}
		synchronized (t) {
			final SongDataEntry sd = t.files.get(path.getFilename());
			if (sd == null) {
				t.files.put(path.getFilename(), songdata);
			} else if (sd.getLastModification() < songdata
					.getLastModification()) {
				t.files.put(path.getFilename(), songdata);
			} else {
				synchronized (AbtractEoWInAbc.messages) {
					AbtractEoWInAbc.messages.remove(path);
				}
				return;
			}
		}
		for (DirTree tree = t; tree != null; tree = tree.parent) {
			tree.size.incrementAndGet();
		}
	}