class CodeCache

Library: OSP
Package: Util
Header: Poco/OSP/CodeCache.h


CodeCache is a utility class that manages the code cache directory where the shared libraries of resolved bundles are kept.

Under certain circumstances, multiple OSP processes can shared the same code cache directory. This is not recommended, but may be done to optimize a system's resource usage. If the codeCache is shared between multiple processes, all processes must use the same versions of common bundles. In other words, while different processes can run different sets of bundles, all bundles used by multiple processes must be the same, in order to prevent conflicts caused by incompatible shared libraries in the common code cache.

See the CodeCache constructor for enabling support for a shared code cache.

Member Summary

Member Functions: clear, hasLibrary, installLibrary, libraryTimestamp, lock, mutexName, pathFor, uninstallLibrary, unlock

Types Aliases


using Lock = Poco::ScopedLock < CodeCache >;



    const std::string & path,
    bool isShared = false

Creates the CodeCache, using the given path.

If isShared is true, the codeCache is considered shared among multiple processes and a named mutex is used to guard access to it.

If the cache directory does not exist, it is created.




Destroys the CodeCache.

Member Functions


void clear();

Clears the cache by removing the entire cache directory.


bool hasLibrary(
    const std::string & name

Returns true if a library with the given name is stored in the code cache.

The name must not contain an filename extension.


void installLibrary(
    const std::string & name,
    std::istream & istr

Installs the library with the given name, which must not contain an extension, into the code cache.


Poco::Timestamp libraryTimestamp(
    const std::string & name

Returns library last modification timestamp.

The name must not contain an filename extension.


void lock();

For a shared CodeCache, locks the code cache directory.

Does nothing if the codeCache is not shared.


std::string pathFor(
    const std::string & name,
    bool appendSuffix = true

Returns the full path for the library with the given name. If appendSuffix is true (default), appends the appropriate suffix for debug version and OS dynamic library extension.


void uninstallLibrary(
    const std::string & name

Removes the library with the given name from the cache directory.


void unlock();

For a shared CodeCache, unlocks the code cache directory.

Does nothing if the codeCache is not shared.

mutexName protected static

static std::string mutexName(
    const std::string & path