Exemplo n.º 1
0
/**
 * @brief	Get the kind of a pthread read/write lock attributes object.
 * @see		pthread_rwlockattr_getkind_np()
 * @param	attr	a pointer to the read/write lock attributes object to be queried.
 * @param	pref	a pointer to an integer that will receive the kind of the read/write lock.
 * @return	0 on success or an error number on failure.
 */
int rwlock_attr_getkind(pthread_rwlockattr_t *attr, int *pref) {
#ifdef MAGMA_PEDANTIC
	int result = pthread_rwlockattr_getkind_np(attr, pref);
	if (result) log_pedantic("Could not get the read/write lock attribute preference. {pthread_rwlockattr_getkind_np = %i}", result);
	return result;
#else
	return pthread_rwlockattr_getkind_np(attr, pref);
#endif
}
Exemplo n.º 2
0
TEST(pthread, pthread_rwlockattr_smoke) {
  pthread_rwlockattr_t attr;
  ASSERT_EQ(0, pthread_rwlockattr_init(&attr));

  int pshared_value_array[] = {PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_SHARED};
  for (size_t i = 0; i < sizeof(pshared_value_array) / sizeof(pshared_value_array[0]); ++i) {
    ASSERT_EQ(0, pthread_rwlockattr_setpshared(&attr, pshared_value_array[i]));
    int pshared;
    ASSERT_EQ(0, pthread_rwlockattr_getpshared(&attr, &pshared));
    ASSERT_EQ(pshared_value_array[i], pshared);
  }

  int kind_array[] = {PTHREAD_RWLOCK_PREFER_READER_NP,
                      PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP};
  for (size_t i = 0; i < sizeof(kind_array) / sizeof(kind_array[0]); ++i) {
    ASSERT_EQ(0, pthread_rwlockattr_setkind_np(&attr, kind_array[i]));
    int kind;
    ASSERT_EQ(0, pthread_rwlockattr_getkind_np(&attr, &kind));
    ASSERT_EQ(kind_array[i], kind);
  }

  ASSERT_EQ(0, pthread_rwlockattr_destroy(&attr));
}