VCSAgSetCookie2

void *VCSAgSetCookie2(const char *name, void *cookie)

This primitive requests the agent framework to store a cookie given by the void *cookie parameter. If there is a value already associated with the cookie, the primitive sets the new value and atomically returns the old value. If there is no value associated with the cookie, the primitive returns NULL.

This value, which is transparent to the agent framework, can be obtained by calling the primitive VCSAgGetCookie(). A cookie is not stored permanently. It is lost when the agent process exits. This primitive can be called from any entry point. For example:

#include "VCSAgApi.h"

...

// Assume that the online, offline, and monitor

// operations on resource require a certain key. Also

// assume that obtaining this key is time consuming, but

// that it can be reused until this process is

// terminated.

//

// In this example, the open entry point obtains the key

// and stores it as a cookie. Subsequent online,

// offline, and monitor entry points get the cookie and

// use the key.

//

// Note that the cookie name can be any unique string.

// This example uses the resource name as the cookie

// name.

//

void *get_key() {

...

}

void res_open(const char *res_name, void **attr_val) {

if (VCSAgGetCookie(res_name) == NULL) {

void *key = get_key();

VCSAgSetCookie2(res_name, key);

}

}

VCSAgResState res_monitor(const char *res_name, void

**attr_val, int *conf_level_ptr) {

VCSAgResState state = VCSAgResUnknown;

*conf_level_ptr = 0;

void *key = VCSAgGetCookie(res_name);

if (key == NULL) {

// Take care of the rare cases when

// the open entry point failed to

// obtain the key and set the the cookie.

key = get_key();

VCSAgSetCookie2(res_name, key);

}

// Use the key for testing if the resource is

// online, and set the state accordingly.

...

return state;

}