geode-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbarr...@apache.org
Subject [11/21] geode-native git commit: GEODE-2494: Removed SpinLock.
Date Wed, 01 Mar 2017 23:35:16 GMT
GEODE-2494: Removed SpinLock.



Project: http://git-wip-us.apache.org/repos/asf/geode-native/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode-native/commit/c59fbe6b
Tree: http://git-wip-us.apache.org/repos/asf/geode-native/tree/c59fbe6b
Diff: http://git-wip-us.apache.org/repos/asf/geode-native/diff/c59fbe6b

Branch: refs/heads/develop
Commit: c59fbe6bb99033be01c2b789a8f036c63e13e57e
Parents: 758a5a1
Author: Jacob Barrett <jbarrett@pivotal.io>
Authored: Wed Feb 22 21:29:49 2017 -0800
Committer: Jacob Barrett <jbarrett@pivotal.io>
Committed: Wed Mar 1 15:10:43 2017 -0800

----------------------------------------------------------------------
 src/cppcache/integration-test/testSpinLock.cpp |  46 ++--
 src/cppcache/src/CacheImpl.hpp                 |   1 -
 src/cppcache/src/EventId.hpp                   |   1 -
 src/cppcache/src/HostAsm.cpp                   |   2 -
 src/cppcache/src/HostAsm.hpp                   | 252 --------------------
 src/cppcache/src/LocalRegion.hpp               |   1 -
 src/cppcache/src/SpinLock.cpp                  |  37 ---
 src/cppcache/src/SpinLock.hpp                  | 122 ----------
 src/cppcache/src/TcrEndpoint.hpp               |   1 -
 src/cppcache/src/hostsolaris.asm               |  83 -------
 10 files changed, 21 insertions(+), 525 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/integration-test/testSpinLock.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/integration-test/testSpinLock.cpp b/src/cppcache/integration-test/testSpinLock.cpp
index cfaa810..7c13441 100644
--- a/src/cppcache/integration-test/testSpinLock.cpp
+++ b/src/cppcache/integration-test/testSpinLock.cpp
@@ -20,28 +20,23 @@
 #include "fw_dunit.hpp"
 #include <geode/GeodeCppCache.hpp>
 
+#include <mutex>
+#include <util/concurrent/spinlock_mutex.hpp>
+
 #include <Condition.hpp>
 
 #include <ace/Task.h>
 #include <ace/Time_Value.h>
 #include <ace/Guard_T.h>
 
-namespace apache {
-namespace geode {
-namespace client {
+namespace {
 
-CPPCACHE_EXPORT void* testSpinLockCreate();
-CPPCACHE_EXPORT void testSpinLockAcquire(void* lock);
-CPPCACHE_EXPORT void testSpinLockRelease(void* lock);
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
+using apache::geode::util::concurrent::spinlock_mutex;
 
 DUNIT_TASK(s1p1, Basic)
   {
-    void* lock = apache::geode::client::testSpinLockCreate();
-    apache::geode::client::testSpinLockAcquire(lock);
-    apache::geode::client::testSpinLockRelease(lock);
+    spinlock_mutex s;
+    { std::lock_guard<spinlock_mutex> lk(s); }
   }
 END_TASK(Basic)
 
@@ -49,7 +44,7 @@ perf::Semaphore* triggerA;
 perf::Semaphore* triggerB;
 perf::Semaphore* triggerM;
 
-void* lock;
+spinlock_mutex lock;
 ACE_Time_Value* btime;
 
 class ThreadA : public ACE_Task_Base {
@@ -57,11 +52,12 @@ class ThreadA : public ACE_Task_Base {
   ThreadA() : ACE_Task_Base() {}
 
   int svc() {
-    apache::geode::client::testSpinLockAcquire(lock);
-    LOG("ThreadA: Acquired lock x.");
-    triggerM->release();
-    triggerA->acquire();
-    apache::geode::client::testSpinLockRelease(lock);
+    {
+      std::lock_guard<spinlock_mutex> lk(lock);
+      LOG("ThreadA: Acquired lock x.");
+      triggerM->release();
+      triggerA->acquire();
+    }
     LOG("ThreadA: Released lock.");
     return 0;
   }
@@ -73,11 +69,12 @@ class ThreadB : public ACE_Task_Base {
 
   int svc() {
     triggerB->acquire();
-    apache::geode::client::testSpinLockAcquire(lock);
-    btime = new ACE_Time_Value(ACE_OS::gettimeofday());
-    LOG("ThreadB: Acquired lock.");
-    triggerM->release();
-    apache::geode::client::testSpinLockRelease(lock);  // for cleanly ness.
+    {
+      std::lock_guard<spinlock_mutex> lk(lock);
+      btime = new ACE_Time_Value(ACE_OS::gettimeofday());
+      LOG("ThreadB: Acquired lock.");
+      triggerM->release();
+    }
     return 0;
   }
 };
@@ -88,8 +85,6 @@ DUNIT_TASK(s1p1, TwoThreads)
     triggerB = new perf::Semaphore(0);
     triggerM = new perf::Semaphore(0);
 
-    lock = apache::geode::client::testSpinLockCreate();
-
     ThreadA* threadA = new ThreadA();
     ThreadB* threadB = new ThreadB();
 
@@ -159,3 +154,4 @@ DUNIT_TASK(s1p1, Cond)
     XASSERT(delta.msec() >= (delay.msec() - 50));
   }
 ENDTASK
+}  // namespace

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/CacheImpl.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/CacheImpl.hpp b/src/cppcache/src/CacheImpl.hpp
index 84dc954..352b79d 100644
--- a/src/cppcache/src/CacheImpl.hpp
+++ b/src/cppcache/src/CacheImpl.hpp
@@ -27,7 +27,6 @@
 #include <geode/CacheAttributes.hpp>
 #include <geode/DistributedSystem.hpp>
 #include "MapWithLock.hpp"
-#include "SpinLock.hpp"
 #include <ace/ACE.h>
 #include <ace/Condition_Recursive_Thread_Mutex.h>
 #include <ace/Time_Value.h>

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/EventId.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/EventId.hpp b/src/cppcache/src/EventId.hpp
index 92d17a6..cae6bdd 100644
--- a/src/cppcache/src/EventId.hpp
+++ b/src/cppcache/src/EventId.hpp
@@ -24,7 +24,6 @@
 #include <geode/geode_types.hpp>
 #include <geode/Cacheable.hpp>
 #include "GeodeTypeIdsImpl.hpp"
-#include "SpinLock.hpp"
 #include <geode/DataOutput.hpp>
 
 #include <string>

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/HostAsm.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/HostAsm.cpp b/src/cppcache/src/HostAsm.cpp
index 763256b..6a65249 100644
--- a/src/cppcache/src/HostAsm.cpp
+++ b/src/cppcache/src/HostAsm.cpp
@@ -25,8 +25,6 @@
 
 using namespace apache::geode::client;
 
-int32_t HostAsm::m_SpinCount = 0;
-
 // TODO refactor - why do we have our own atomic methods? why not use C++11?
 
 #if defined(_LINUX) || defined(_X86_SOLARIS)

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/HostAsm.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/HostAsm.hpp b/src/cppcache/src/HostAsm.hpp
index 770cb5d..3fe59a4 100644
--- a/src/cppcache/src/HostAsm.hpp
+++ b/src/cppcache/src/HostAsm.hpp
@@ -55,37 +55,10 @@ namespace apache {
 namespace geode {
 namespace client {
 
-typedef volatile uint32_t SpinLockField;
-
-/* These should be defined the same as their HOST_LOCK counterparts. */
-#if defined(FLG_SOLARIS_UNIX)
-
-// StaticSpinLock assumes that SpinLock values are initialized to zero!
-
-/* no longer using the ldstub instruction, now using cas */
-/*  Use the high order 4 bytes of the word as the lock */
-enum { SPINLOCK_SET_INT = 0xf0000000 };
-enum { SPINLOCK_SET_BYTE = 0xf0 };
-enum { SPINLOCK_CLEAR_INT = 0 };
-enum { SPINLOCK_CLEAR_BYTE = 0 };
-
-#else
-
-// StaticSpinLock assumes that SpinLock values are initialized to zero!
-
-/* default Windows and x86 Linux */
-enum { SPINLOCK_SET_INT = 1 };
-enum { SPINLOCK_SET_BYTE = 1 };
-enum { SPINLOCK_CLEAR_INT = 0 };
-enum { SPINLOCK_CLEAR_BYTE = 0 };
-
-#endif
 
 #ifdef _SPARC_SOLARIS
 // implemented in hostsolaris.asm
 extern "C" {
-void HostAsmUnlock(int32_t, SpinLockField*);
-bool HostAsmTryLock(SpinLockField*, int32_t, uint32_t);
 int32_t InterlockedExchangeAdd(volatile int32_t*, int32_t);
 // int64_t InterlockedExchangeAddLong(volatile int64_t *, int64_t);
 }
@@ -103,136 +76,6 @@ int32_t InterlockedCompareExchange(volatile LONG*, int32_t, int32_t);
  */
 class CPPCACHE_EXPORT HostAsm {
  public:
-  enum HostSleepConsts {
-    SPIN_MIN_SLEEP = 250,
-    SPIN_SLEEP_LIMIT = 5000,
-    SPIN_COUNT = 3000
-  };
-
-  static void spinLockInit(SpinLockField& lockField) {
-    // StaticSpinLock assumes that SpinLock values are initialized to zero!
-    lockField = SPINLOCK_CLEAR_INT;
-  }
-
-  /**
-   *  Get exclusive access to the lock, return when the lock is granted.
-   */
-  inline static void spinLockAcquire(SpinLockField& lockField) {
-#if defined(_MACOSX)
-    OSSpinLockLock(reinterpret_cast<volatile int32_t*>(&lockField));
-#else
-    uint32_t lockVal = SPINLOCK_SET_INT;
-    int32_t spinCount = HostAsm::getSpinCount();
-    if (!HostAsm::_tryLock(lockField, spinCount, lockVal)) {
-      ACE_OS::thr_yield();
-      if (!HostAsm::_tryLock(lockField, spinCount, lockVal)) {
-        uint32_t lock_sleepTime = SPIN_MIN_SLEEP;
-        do {
-          HostAsm::nanoSleep(lock_sleepTime);
-          if (lock_sleepTime < SPIN_SLEEP_LIMIT) {
-            lock_sleepTime++;
-          }
-        } while (!HostAsm::_tryLock(lockField, spinCount, lockVal));
-      }
-    }
-#endif
-  }
-
-  inline static int32_t getCpuCount() {
-#ifdef _WIN32
-    SYSTEM_INFO si;
-    GetSystemInfo(&si);
-    return si.dwNumberOfProcessors;
-#else
-    return static_cast<int32_t>(sysconf(_SC_NPROCESSORS_ONLN));
-#endif
-  }
-
-  inline static void nanoSleep(uint32_t time) {
-    timespec nanos;
-    nanos.tv_sec = 0;
-    nanos.tv_nsec = time;
-    timespec remaining;
-    remaining.tv_sec = 0;
-    remaining.tv_nsec = 0;
-    ACE_OS::nanosleep(&nanos, &remaining);
-  }
-
-  inline static int64_t currentTimeMs() {
-    return ACE_OS::gettimeofday().msec();
-  }
-
-#if 0  // Unused
-    /**
-     * Try to get exclusive access to the lock in the specified amount of time.
-     * Return whether the lock is granted.
-     */
-    inline static bool spinLockTryAcquire(SpinLockField& lockField,
-        int32_t msTimeout)
-    {
-#if defined(_MACOSX)
-      return OSSpinLockTry((volatile int32_t *) &lockField);
-#else
-      uint32_t lockVal = SPINLOCK_SET_INT;
-      int32_t spinCount = HostAsm::getSpinCount();
-      int64_t startTime = HostAsm::currentTimeMs();
-      if (!HostAsm::_tryLock(lockField, spinCount, lockVal)) {
-	      ACE_OS::thr_yield();
-	      if (!HostAsm::_tryLock(lockField, spinCount, lockVal)) {
-	        uint32_t lock_sleepTime = SPIN_MIN_SLEEP;
-	        do {
-	          HostAsm::nanoSleep(lock_sleepTime);
-            if (lock_sleepTime < SPIN_SLEEP_LIMIT) {
-              lock_sleepTime++;
-            }
-            if (HostAsm::currentTimeMs() - startTime > (int64_t)msTimeout) {
-              return false;
-            }
-          } while (!HostAsm::_tryLock(lockField, spinCount, lockVal));
-        }
-      }
-      return true;
-#endif
-    }
-#endif
-
-  /**
-   * Name - SpinUnlock
-   * Purpose -
-   *      Release the specified spinlock.
-   */
-  inline static void spinLockRelease(SpinLockField& lockField) {
-#ifdef _WIN32
-    InterlockedExchange((volatile LONG*)(&lockField), SPINLOCK_CLEAR_BYTE);
-#elif defined(_LINUX) /*|| defined(_X86_SOLARIS)*/
-
-    int oldval = SPINLOCK_CLEAR_BYTE;
-    __asm__ __volatile__("xchg %0, %1"
-                         : "=q"(oldval), "=m"(lockField)
-                         : "0"(oldval)
-                         : "memory");
-#elif defined(_SPARC_SOLARIS)
-    SpinLockField* lockPtr = &lockField;
-    HostAsmUnlock(SPINLOCK_CLEAR_BYTE, lockPtr);
-#elif defined(_X86_SOLARIS)
-    // atomic_cas_32((volatile uin32_t*)&lockField, 1, 0);
-    atomic_cas_32(&lockField, 1, 0);
-#elif defined(_MACOSX)
-    OSSpinLockUnlock(reinterpret_cast<volatile int32_t*>(&lockField));
-#else
-#error Port incomplete.
-#endif
-  }
-
-  static int32_t m_SpinCount;
-
-  inline static int32_t getSpinCount() {
-    if (HostAsm::m_SpinCount == 0) {
-      HostAsm::m_SpinCount =
-          (HostAsm::getCpuCount() == 1 ? 1 : int32_t(SPIN_COUNT));
-    }
-    return HostAsm::m_SpinCount;
-  }
 
 #if defined(_LINUX) || defined(_X86_SOLARIS)
   inline static int32_t InterlockedExchangeAdd(volatile int32_t* val,
@@ -342,101 +185,6 @@ class CPPCACHE_EXPORT HostAsm {
     return atomicAnd(data, ~mask);
   }
 
- private:
-#if !defined(_MACOSX)
-  inline static bool _tryLock(SpinLockField& lockField, int32_t count,
-                              uint32_t lockVal) {
-    GF_DEV_ASSERT(count > 0);
-#if defined(_LINUX)
-    int oldval = 1;  // Set to 1, since we use 0 as success.
-    do {
-      oldval = 1;
-      __asm__ __volatile__(
-          "lock\n"
-          "xchg %0,%1"
-          : "=q"(oldval), "=m"(lockField)
-          : "0"(SPINLOCK_SET_BYTE)
-          : "memory");
-      if (oldval == 0) {
-        return true;
-      }
-      __asm__ __volatile__("pause");
-      count--;
-    } while (count > 0);
-    if (oldval == 0) {
-      return true;
-    }
-    return false;
-#elif defined(_SPARC_SOLARIS)
-    SpinLockField* lockPtr = &lockField;
-    return HostAsmTryLock(lockPtr, count, lockVal);
-#elif defined(_X86_SOLARIS)
-    SpinLockField* lockPtr = &lockField;
-    do {
-      if (*lockPtr == SPINLOCK_CLEAR_INT) {
-        // if oldValue is zero, then it must have been updated to 1
-        // else if CAS was unsuccessful then it will still be locked i.e. 1
-        if (atomic_cas_32(lockPtr, 0, 1) == 0) {
-          return true;
-        }
-      }
-      // yield the thread if required to avoid tight spin
-      ACE_Thread::yield();
-      count--;
-    } while (count > 0);
-    return false;
-#elif defined(_WIN32)
-    SpinLockField* lockPtr = &lockField;
-    SpinLockField prevValue;
-    // SpinLockField prevCopy;
-    prevValue = *lockPtr;
-    do {
-      if (prevValue == SPINLOCK_CLEAR_INT) {
-        if (InterlockedCompareExchangeAcquire((volatile LONG*)lockPtr, lockVal,
-                                              SPINLOCK_CLEAR_INT) ==
-            SPINLOCK_CLEAR_INT) {
-          return true;
-        }
-      } else {
-#if defined(_MANAGED)
-        Sleep(0);
-#else
-        YieldProcessor();
-        YieldProcessor();
-        YieldProcessor();
-        YieldProcessor();
-        YieldProcessor();
-#endif
-      }
-      // Fancy atomic read, equivalent to prevValue = *lockPtr
-      prevValue = InterlockedExchangeAdd((volatile LONG*)(lockPtr), 0);
-    } while (--count >= 0);
-    return false;
-/*
-if(count--) {
-  return false;
-}
-prevCopy = prevValue;
-if(prevValue == SPINLOCK_CLEAR_INT) {
-  prevValue = InterlockedCompareExchangeAcquire(
-    (volatile LONG*)lockPtr, lockVal, prevValue);
-} else {
-  //Fancy atomic read, equivalent to prevValue = *lockPtr
-  prevValue = InterlockedExchangeAdd((volatile LONG*)(lockPtr), 0);
-
-  //This might be slightly faster
-  //prevValue = InterlockedCompareExchange((volatile LONG*)lockPtr,
-  //                                       prevValue, prevValue);
-}
-} while( prevCopy != prevValue );
-return true;
-*/
-#else
-#error Port impcomplete
-#endif
-    return true;
-  }
-#endif  // !defined(_MACOSX)
 };
 }  // namespace client
 }  // namespace geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/LocalRegion.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/LocalRegion.hpp b/src/cppcache/src/LocalRegion.hpp
index 0d0fa58..0998228 100644
--- a/src/cppcache/src/LocalRegion.hpp
+++ b/src/cppcache/src/LocalRegion.hpp
@@ -45,7 +45,6 @@
 #include "RegionInternal.hpp"
 #include "RegionStats.hpp"
 #include "EntriesMapFactory.hpp"
-#include "SpinLock.hpp"
 #include "SerializationRegistry.hpp"
 #include "MapWithLock.hpp"
 #include "CacheableToken.hpp"

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/SpinLock.cpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/SpinLock.cpp b/src/cppcache/src/SpinLock.cpp
deleted file mode 100644
index 797f0d5..0000000
--- a/src/cppcache/src/SpinLock.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <geode/geode_globals.hpp>
-
-#include "SpinLock.hpp"
-
-namespace apache {
-namespace geode {
-namespace client {
-
-void* testSpinLockCreate() { return (void*)new SpinLock(); }
-
-void testSpinLockAcquire(void* lock) {
-  (reinterpret_cast<SpinLock*>(lock))->acquire();
-}
-
-void testSpinLockRelease(void* lock) {
-  (reinterpret_cast<SpinLock*>(lock))->release();
-}
-}  // namespace client
-}  // namespace geode
-}  // namespace apache

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/SpinLock.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/SpinLock.hpp b/src/cppcache/src/SpinLock.hpp
deleted file mode 100644
index d91b7b3..0000000
--- a/src/cppcache/src/SpinLock.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#pragma once
-
-#ifndef GEODE_SPINLOCK_H_
-#define GEODE_SPINLOCK_H_
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "HostAsm.hpp"
-
-#ifdef DEBUG
-#define GF_SAFELOCK 1
-#else
-#define GF_SAFELOCK 0
-#endif
-
-namespace apache {
-namespace geode {
-namespace client {
-
-/**
- * For an object that needs to be protected by spinlock, declare a field of type
- * SpinLock. To protect the operation, use a SpinLockGuard on the stack to
- * automatically lock and then release when the stack is unwound..
- */
-class CPPCACHE_EXPORT SpinLock {
- public:
-  SpinLock()
-      : m_lockField(0)
-#if GF_SAFELOCK
-        ,
-        m_ownerId(0)
-#endif
-  {
-    HostAsm::spinLockInit(m_lockField);
-  }
-
-  ~SpinLock() {}
-
-  void acquire() {
-#if GF_SAFELOCK
-    int32_t ownerId = (int32_t)ACE_OS::thr_self();
-    GF_R_ASSERT(
-        (ownerId == 0) ||
-        (ownerId !=
-         m_ownerId));  // detect attempt to lock something I already have.
-#endif
-    HostAsm::spinLockAcquire(m_lockField);
-#if GF_SAFELOCK
-    m_ownerId = ownerId;
-#endif
-  }
-
-  void release() {
-#if GF_SAFELOCK
-    m_ownerId = 0;
-#endif
-    HostAsm::spinLockRelease(m_lockField);
-  }
-
- private:
-  SpinLockField m_lockField;
-#if GF_SAFELOCK
-  int32_t m_ownerId;
-#endif
-};
-
-/**
- * Example:
- *  class Foo {
- *    private:
- *
- *    SpinLock m_lock;
- *
- *    public:
- *
- *    Bool doSomething( )
- *    { SpinLockGuard __guard( m_lock );
- *      if ( ?? ) {
- *        return false;
- *      } else {
- *        if ( ?? ) throw ??
- *        return true;
- *      }
- *    }
- *  };
- *
- * The lock is automatically released no matter what return path is taken.
- */
-class SpinLockGuard {
- public:
-  SpinLockGuard(SpinLock& spinlock) : m_lock(spinlock) { m_lock.acquire(); }
-
-  ~SpinLockGuard() { m_lock.release(); }
-
- private:
-  SpinLock& m_lock;
-};
-
-// Test function
-CPPCACHE_EXPORT void* testSpinLockCreate();
-CPPCACHE_EXPORT void testSpinLockAcquire(void* lock);
-CPPCACHE_EXPORT void testSpinLockRelease(void* lock);
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
-
-#endif  // GEODE_SPINLOCK_H_

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/TcrEndpoint.hpp
----------------------------------------------------------------------
diff --git a/src/cppcache/src/TcrEndpoint.hpp b/src/cppcache/src/TcrEndpoint.hpp
index 77ab3ab..61d43d2 100644
--- a/src/cppcache/src/TcrEndpoint.hpp
+++ b/src/cppcache/src/TcrEndpoint.hpp
@@ -30,7 +30,6 @@
 #include "Set.hpp"
 #include "TcrConnection.hpp"
 #include "Task.hpp"
-#include "SpinLock.hpp"
 
 namespace apache {
 namespace geode {

http://git-wip-us.apache.org/repos/asf/geode-native/blob/c59fbe6b/src/cppcache/src/hostsolaris.asm
----------------------------------------------------------------------
diff --git a/src/cppcache/src/hostsolaris.asm b/src/cppcache/src/hostsolaris.asm
index 03ae101..7a12bde 100644
--- a/src/cppcache/src/hostsolaris.asm
+++ b/src/cppcache/src/hostsolaris.asm
@@ -103,86 +103,3 @@ retryAddLong:                      ! do {
         retl 
         mov     %o3,%o0            ! return old value of *ctrPtr in %o0
 
-/*========================================================================
- *
- * Name - HostAsmUnlock
- *
- * Purpose -
- *      Unlock the specified lock.
- *
- *========================================================================
- */
-        .proc   16
-        .global HostAsmUnlock
-        .type HostAsmUnlock, #function
-HostAsmUnlock:
-        membar  #StoreStore | #LoadStore | #StoreLoad |  #LoadLoad
-        retl
-        st      %o0,[%o1]  ! store word, 32 bit
-!        st      %g0,[%o0]  ! store word, 32 bit
-
-/*========================================================================
- *
- * Name - HostAsmTryLock
- *
- * bool HostAsmTryLock(SpinLockField *lockPtr, int32_t count, uint32_t lockVal);
- * Purpose -
- *      Try to get access to the specified lock.  If it succeeds in getting
- *      the lock in the number of tries specified in by count,
- *      TRUE is returned.  If the lock is not available with the count
- *      tries, it returns FALSE.
- *
- *========================================================================
- */
-        .seg    "text"
-        .proc   16
-        .global HostAsmTryLock
-        .type HostAsmTryLock, #function
-HostAsmTryLock:
-                                        ! %o0 = lockPtr
-                                        ! %o1 = count
-                                        ! %o2 = lock value to store
-
-        ld      [%o0],%o3               ! load *lockPtr
-        tst     %o3                     ! test if 0
-        bne     spinLoop                ! if not 0 we must spin
-        mov     %o2, %o3                ! branch delay slot, new value into o3
-tryLock:
-                                   ! %o0 = memPtr
-                                   ! %g0 = oldValue (zero)
-                                   ! %o3 = newValue
-                                   ! if (%g0 == *memPtr)
-                                   !   tmp = *memPtr, *memPtr = %o3, %o3 = tmp
-                                   ! else
-                                   !   %o3 = *memPtr
-        cas     [%o0], %g0, %o3
-
-        tst     %o3                     ! what was value in lock word
-        be,a    return                  ! if 0 go to return
-        mov     1,%o3                   ! set return value
-
-
-
-spinLoop:
-        ld      [%o0],%o3               ! load *lockPtr
-        tst     %o3                     ! test if 0
-        be      tryLock                 ! if 0 we can retry the atomic swap
-        mov     %o2, %o3                ! branch delay slot, new value into o3
-
-        nop                             !  delay to limit frequency of probing
-        nop                             !    shared memory
-        nop
-        nop
-        nop
-
-        dec     %o1                     ! count--
-        tst     %o1                     ! test count
-        bg      spinLoop                ! count > 0 go to spinLoop
-        nop                             ! branch delay slot
-
-        mov     0,%o3                   ! fail because count ran out
-
-return:
-        membar  #LoadLoad | #LoadStore |  #StoreStore  | #StoreLoad
-        retl
-        add     %g0,%o3,%o0             ! move result to %o0 for return


Mime
View raw message