diff options
author | jschuh@chromium.org <jschuh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-15 23:24:14 +0000 |
---|---|---|
committer | jschuh@chromium.org <jschuh@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-15 23:24:14 +0000 |
commit | b4f4fe4fa3ba2012d2ba309f51d89d86b3668f3a (patch) | |
tree | 8bacd9990db2c1c00d85c4aaf962e3bdc5558dc5 /content | |
parent | 52fe60de7f73d715c727271a2a7684e6f61b2b13 (diff) | |
download | chromium_src-b4f4fe4fa3ba2012d2ba309f51d89d86b3668f3a.zip chromium_src-b4f4fe4fa3ba2012d2ba309f51d89d86b3668f3a.tar.gz chromium_src-b4f4fe4fa3ba2012d2ba309f51d89d86b3668f3a.tar.bz2 |
Make PrependWindowsSessionPath thread safe.
BUG=92858
TEST=None
Review URL: http://codereview.chromium.org/7648035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96856 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/common/sandbox_policy.cc | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/content/common/sandbox_policy.cc b/content/common/sandbox_policy.cc index 8e3e2d9..c0fb940 100644 --- a/content/common/sandbox_policy.cc +++ b/content/common/sandbox_policy.cc @@ -198,22 +198,20 @@ void AddDllEvictionPolicy(sandbox::TargetPolicy* policy) { // Returns the object path prepended with the current logon session. string16 PrependWindowsSessionPath(const char16* object) { // Cache this because it can't change after process creation. - static string16* session_prefix = NULL; - if (!session_prefix) { + uintptr_t s_session_id = 0; + if (s_session_id == 0) { HANDLE token; - DWORD session_id; DWORD session_id_length; + DWORD session_id = 0; CHECK(::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &token)); CHECK(::GetTokenInformation(token, TokenSessionId, &session_id, sizeof(session_id), &session_id_length)); CloseHandle(token); - - session_prefix = new string16(base::StringPrintf(L"\\Sessions\\%d", - session_id)); + s_session_id = session_id; } - return *session_prefix + object; + return base::StringPrintf(L"\\Sessions\\%d%ls", s_session_id, object); } // Closes handles that are opened at process creation and initialization. |