Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


 

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();

...