int main() { srandom((unsigned int) time(NULL)); test_lock.pad1 = test_lock.pad2 = 0x44; S_INIT_LOCK(&test_lock.lock); if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) { printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); return 1; } if (!S_LOCK_FREE(&test_lock.lock)) { printf("S_LOCK_TEST: failed, lock not initialized\n"); return 1; } S_LOCK(&test_lock.lock); if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) { printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); return 1; } if (S_LOCK_FREE(&test_lock.lock)) { printf("S_LOCK_TEST: failed, lock not locked\n"); return 1; } S_UNLOCK(&test_lock.lock); if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) { printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); return 1; } if (!S_LOCK_FREE(&test_lock.lock)) { printf("S_LOCK_TEST: failed, lock not unlocked\n"); return 1; } S_LOCK(&test_lock.lock); if (test_lock.pad1 != 0x44 || test_lock.pad2 != 0x44) { printf("S_LOCK_TEST: failed, declared datatype is wrong size\n"); return 1; } if (S_LOCK_FREE(&test_lock.lock)) { printf("S_LOCK_TEST: failed, lock not re-locked\n"); return 1; } printf("S_LOCK_TEST: this will print %d stars and then\n", NUM_DELAYS); printf(" exit with a 'stuck spinlock' message\n"); printf(" if S_LOCK() and TAS() are working.\n"); fflush(stdout); s_lock(&test_lock.lock, __FILE__, __LINE__); printf("S_LOCK_TEST: failed, lock not locked\n"); return 1; }
void pg_spinlock_barrier(void) { S_LOCK(&dummy_spinlock); S_UNLOCK(&dummy_spinlock); }