Fix: Allow NonMutableAccess in MutableHookDataAcessor
This commit is contained in:
parent
f253931bb7
commit
65a64774b6
1 changed files with 17 additions and 2 deletions
|
@ -76,13 +76,28 @@ impl StoreIdAccessor for Aspect {
|
||||||
impl MutableHookDataAccessor for Aspect {
|
impl MutableHookDataAccessor for Aspect {
|
||||||
fn access_mut(&self, fle: &mut FileLockEntry) -> HookResult<()> {
|
fn access_mut(&self, fle: &mut FileLockEntry) -> HookResult<()> {
|
||||||
let accessors : Vec<HDA> = self.hooks.iter().map(|h| h.accessor()).collect();
|
let accessors : Vec<HDA> = self.hooks.iter().map(|h| h.accessor()).collect();
|
||||||
if !accessors.iter().all(|a| match a { &HDA::MutableAccess(_) => true, _ => false }) {
|
|
||||||
|
fn is_file_accessor(a: &HDA) -> bool {
|
||||||
|
match a {
|
||||||
|
&HDA::MutableAccess(_) => true,
|
||||||
|
&HDA::NonMutableAccess(_) => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !accessors.iter().all(|a| is_file_accessor(a)) {
|
||||||
return Err(HE::new(HEK::AccessTypeViolation, None));
|
return Err(HE::new(HEK::AccessTypeViolation, None));
|
||||||
}
|
}
|
||||||
|
|
||||||
for accessor in accessors {
|
for accessor in accessors {
|
||||||
match accessor {
|
match accessor {
|
||||||
HDA::MutableAccess(accessor) => try!(accessor.access_mut(fle)),
|
HDA::MutableAccess(accessor) => try!(accessor.access_mut(fle)),
|
||||||
|
|
||||||
|
// TODO: Naiive implementation.
|
||||||
|
// More sophisticated version would check whether there are _chunks_ of
|
||||||
|
// NonMutableAccess accessors and execute these chunks in parallel. We do not have
|
||||||
|
// performance concerns yet, so this is okay.
|
||||||
|
HDA::NonMutableAccess(accessor) => try!(accessor.access(fle)),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue