"Fossies" - the Fresh Open Source Software Archive

Member "memcached-1.6.15/cache.h" (21 Feb 2022, 3479 Bytes) of package /linux/www/memcached-1.6.15.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "cache.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 1.6.10_vs_1.6.11.

    1 /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
    2 #ifndef CACHE_H
    3 #define CACHE_H
    4 #include <pthread.h>
    5 #include "queue.h"
    6 
    7 #ifndef NDEBUG
    8 /* may be used for debug purposes */
    9 extern int cache_error;
   10 #endif
   11 
   12 struct cache_free_s {
   13     STAILQ_ENTRY(cache_free_s) c_next;
   14 };
   15 
   16 //typedef STAILQ_HEAD(cache_head_s, cache_free_s) cache_head_t;
   17 /**
   18  * Definition of the structure to keep track of the internal details of
   19  * the cache allocator. Touching any of these variables results in
   20  * undefined behavior.
   21  */
   22 typedef struct {
   23     /** Mutex to protect access to the structure */
   24     pthread_mutex_t mutex;
   25     /** Name of the cache objects in this cache (provided by the caller) */
   26     char *name;
   27     /** freelist of available buffers */
   28     STAILQ_HEAD(cache_head, cache_free_s) head;
   29     /** The size of each element in this cache */
   30     size_t bufsize;
   31     /** The capacity of the list of elements */
   32     int freetotal;
   33     /** Total malloc'ed objects */
   34     int total;
   35     /** The current number of free elements */
   36     int freecurr;
   37     /** A limit on the total number of elements */
   38     int limit;
   39 } cache_t;
   40 
   41 /**
   42  * Create an object cache.
   43  *
   44  * The object cache will let you allocate objects of the same size. It is fully
   45  * MT safe, so you may allocate objects from multiple threads without having to
   46  * do any synchronization in the application code.
   47  *
   48  * @param name the name of the object cache. This name may be used for debug purposes
   49  *             and may help you track down what kind of object you have problems with
   50  *             (buffer overruns, leakage etc)
   51  * @param bufsize the size of each object in the cache
   52  * @param align the alignment requirements of the objects in the cache.
   53  * @param constructor the function to be called to initialize memory when we need
   54  *                    to allocate more memory from the os.
   55  * @param destructor the function to be called before we release the memory back
   56  *                   to the os.
   57  * @return a handle to an object cache if successful, NULL otherwise.
   58  */
   59 cache_t* cache_create(const char* name, size_t bufsize, size_t align);
   60 
   61 /**
   62  * Destroy an object cache.
   63  *
   64  * Destroy and invalidate an object cache. You should return all buffers allocated
   65  * with cache_alloc by using cache_free before calling this function. Not doing
   66  * so results in undefined behavior (the buffers may or may not be invalidated)
   67  *
   68  * @param handle the handle to the object cache to destroy.
   69  */
   70 void cache_destroy(cache_t* handle);
   71 /**
   72  * Allocate an object from the cache.
   73  *
   74  * @param handle the handle to the object cache to allocate from
   75  * @return a pointer to an initialized object from the cache, or NULL if
   76  *         the allocation cannot be satisfied.
   77  */
   78 void* cache_alloc(cache_t* handle);
   79 void* do_cache_alloc(cache_t* handle);
   80 /**
   81  * Return an object back to the cache.
   82  *
   83  * The caller should return the object in an initialized state so that
   84  * the object may be returned in an expected state from cache_alloc.
   85  *
   86  * @param handle handle to the object cache to return the object to
   87  * @param ptr pointer to the object to return.
   88  */
   89 void cache_free(cache_t* handle, void* ptr);
   90 void do_cache_free(cache_t* handle, void* ptr);
   91 /**
   92  * Set or adjust a limit for the number of objects to malloc
   93  *
   94  * @param handle handle to the object cache to adjust
   95  * @param limit the number of objects to cache before returning NULL
   96  */
   97 void cache_set_limit(cache_t* handle, int limit);
   98 
   99 #endif