By default AGENT++ is a multi-threaded agent. Therefore access to each MibEntry in the a Mib has to be synchronized.
...
In any case, the locking procedure boundary must be implemented according to the following schema:
Code Block |
---|
Mib* mib; ... mib->lock_mib(); // code to lookup a MibEntry (replace "my context" with "" or your context and the OID by the table entry OID, for example): MibTable* table = (MibTable*) mib->get("my context", "1.3.6.1.4.1.????.1"); // enter protected region: table->start_synch(); // now you can drop the Mib lock mib->unlock_mib(); // do the real work on table ... table->end_synch(); |
If you need to add/remove objects from the Mib, the locking schema looks sligtly different:
Code Block |
---|
Mib* mib;
...
mib->lock_mib();
// code to lookup a MibEntry:
MibTable table = ...;
// enter protected region:
table->start_synch();
// remove table from Mib:
MibContext* ctx = mib->get_context(DEFAULT_CONTEXT);
ctx->remove(*table->key());
table->end_synch();
delete table;
// now you can drop the Mib lock
mib->unlock_mib();
|
...