Bläddra i källkod

in spinlock-check mode, record the last taker of the spinlock

Samuel Thibault 12 år sedan
förälder
incheckning
9f08f313c6
2 ändrade filer med 18 tillägg och 0 borttagningar
  1. 2 0
      src/common/starpu_spinlock.c
  2. 16 0
      src/common/starpu_spinlock.h

+ 2 - 0
src/common/starpu_spinlock.c

@@ -68,6 +68,7 @@ int _starpu_spin_destroy(struct _starpu_spinlock *lock STARPU_ATTRIBUTE_UNUSED)
 #endif
 }
 
+#undef _starpu_spin_lock
 int _starpu_spin_lock(struct _starpu_spinlock *lock)
 {
 #ifdef STARPU_SIMGRID
@@ -120,6 +121,7 @@ int _starpu_spin_checklocked(struct _starpu_spinlock *lock)
 #endif
 }
 
+#undef _starpu_spin_trylock
 int _starpu_spin_trylock(struct _starpu_spinlock *lock)
 {
 #ifdef STARPU_SIMGRID

+ 16 - 0
src/common/starpu_spinlock.h

@@ -30,6 +30,7 @@ struct _starpu_spinlock
 #elif defined(STARPU_SPINLOCK_CHECK)
 	pthread_mutexattr_t errcheck_attr;
 	_starpu_pthread_mutex_t errcheck_lock;
+	const char *last_taker;
 #elif defined(HAVE_PTHREAD_SPIN_LOCK)
 	_starpu_pthread_spinlock_t lock;
 #else
@@ -42,7 +43,22 @@ int _starpu_spin_init(struct _starpu_spinlock *lock);
 int _starpu_spin_destroy(struct _starpu_spinlock *lock);
 
 int _starpu_spin_lock(struct _starpu_spinlock *lock);
+#if defined(STARPU_SPINLOCK_CHECK)
+#define _starpu_spin_lock(lock) ({ \
+	_starpu_spin_lock(lock); \
+	(lock)->last_taker = __func__; \
+	0; \
+})
+#endif
 int _starpu_spin_trylock(struct _starpu_spinlock *lock);
+#if defined(STARPU_SPINLOCK_CHECK)
+#define _starpu_spin_trylock(lock) ({ \
+	int err = _starpu_spin_trylock(lock); \
+	if (!err) \
+		(lock)->last_taker = __func__; \
+	err; \
+})
+#endif
 int _starpu_spin_checklocked(struct _starpu_spinlock *lock);
 int _starpu_spin_unlock(struct _starpu_spinlock *lock);