diff options
author | Maria Matejka <mq@ucw.cz> | 2023-01-24 11:01:34 +0100 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2023-01-26 13:22:28 +0100 |
commit | 05d8c3699d51866c68747167556e7c1f06390afe (patch) | |
tree | f4d02839aa5ad2086779974625e52ba5c2b028d0 /nest/locks.h | |
parent | 4334f86251429eb39bfe81ff19496d141fccef84 (diff) |
Object locks use events
Instead of calling custom hooks from object locks, we use standard event
sending mechanism to inform protocols about object lock changes. This is
a backport from version 3 where these events are passed across threads.
This implementation of object locks doesn't use mutexes to lock the
whole data structure. In version 3, this data structure may get accessed
from multiple threads and must be protected by mutex.
Diffstat (limited to 'nest/locks.h')
-rw-r--r-- | nest/locks.h | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/nest/locks.h b/nest/locks.h index 37026c68..0cb33db9 100644 --- a/nest/locks.h +++ b/nest/locks.h @@ -31,8 +31,7 @@ struct object_lock { uint inst; /* ... instance ID */ struct iface *iface; /* ... interface */ struct iface *vrf; /* ... or VRF (if iface is unknown) */ - void (*hook)(struct object_lock *); /* Called when the lock succeeds */ - void *data; /* User data */ + event event; /* Enqueued when the lock succeeds */ /* ... internal to lock manager, don't touch ... */ node n; /* Node in list of olocks */ int state; /* OLOCK_STATE_xxx */ @@ -50,6 +49,5 @@ void olock_init(void); #define OLOCK_STATE_FREE 0 #define OLOCK_STATE_LOCKED 1 #define OLOCK_STATE_WAITING 2 -#define OLOCK_STATE_EVENT 3 /* waiting for unlock processing */ #endif |