+void silc_rwlock_free(SilcRwLock rwlock)
+{
+#ifdef SILC_THREADS
+ if (rwlock) {
+ pthread_rwlock_destroy(&rwlock->rwlock);
+ silc_free(rwlock);
+ }
+#endif /* SILC_THREADS */
+}
+
+void silc_rwlock_rdlock(SilcRwLock rwlock)
+{
+#ifdef SILC_THREADS
+ if (rwlock)
+ pthread_rwlock_rdlock(&rwlock->rwlock);
+#endif /* SILC_THREADS */
+}
+
+void silc_rwlock_wrlock(SilcRwLock rwlock)
+{
+#ifdef SILC_THREADS
+ if (rwlock)
+ SILC_VERIFY(pthread_rwlock_wrlock(&rwlock->rwlock) == 0);
+#endif /* SILC_THREADS */
+}
+
+void silc_rwlock_unlock(SilcRwLock rwlock)
+{
+#ifdef SILC_THREADS
+ if (rwlock)
+ SILC_VERIFY(pthread_rwlock_unlock(&rwlock->rwlock) == 0);
+#endif /* SILC_THREADS */
+}