intl/icu/source/common/mutex.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /*
     2 ******************************************************************************
     3 *
     4 *   Copyright (C) 1997-2013, International Business Machines
     5 *   Corporation and others.  All Rights Reserved.
     6 *
     7 ******************************************************************************
     8 */
     9 //----------------------------------------------------------------------------
    10 // File:     mutex.h
    11 //
    12 // Lightweight C++ wrapper for umtx_ C mutex functions
    13 //
    14 // Author:   Alan Liu  1/31/97
    15 // History:
    16 // 06/04/97   helena         Updated setImplementation as per feedback from 5/21 drop.
    17 // 04/07/1999  srl               refocused as a thin wrapper
    18 //
    19 //----------------------------------------------------------------------------
    20 #ifndef MUTEX_H
    21 #define MUTEX_H
    23 #include "unicode/utypes.h"
    24 #include "unicode/uobject.h"
    25 #include "umutex.h"
    27 U_NAMESPACE_BEGIN
    29 //----------------------------------------------------------------------------
    30 // Code within that accesses shared static or global data should
    31 // should instantiate a Mutex object while doing so. You should make your own 
    32 // private mutex where possible.
    34 // For example:
    35 // 
    36 // UMutex myMutex;
    37 // 
    38 // void Function(int arg1, int arg2)
    39 // {
    40 //    static Object* foo;     // Shared read-write object
    41 //    Mutex mutex(&myMutex);  // or no args for the global lock
    42 //    foo->Method();
    43 //    // When 'mutex' goes out of scope and gets destroyed here, the lock is released
    44 // }
    45 //
    46 // Note:  Do NOT use the form 'Mutex mutex();' as that merely forward-declares a function
    47 //        returning a Mutex. This is a common mistake which silently slips through the
    48 //        compiler!!
    49 //
    51 class U_COMMON_API Mutex : public UMemory {
    52 public:
    53   inline Mutex(UMutex *mutex = NULL);
    54   inline ~Mutex();
    56 private:
    57   UMutex   *fMutex;
    59   Mutex(const Mutex &other); // forbid copying of this class
    60   Mutex &operator=(const Mutex &other); // forbid copying of this class
    61 };
    63 inline Mutex::Mutex(UMutex *mutex)
    64   : fMutex(mutex)
    65 {
    66   umtx_lock(fMutex);
    67 }
    69 inline Mutex::~Mutex()
    70 {
    71   umtx_unlock(fMutex);
    72 }
    74 U_NAMESPACE_END
    76 #endif //_MUTEX_
    77 //eof

mercurial