aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libssh/callbacks.h54
-rw-r--r--src/threads.c21
-rw-r--r--src/threads/pthread.c84
-rw-r--r--tests/unittests/torture_rand.c1
4 files changed, 85 insertions, 75 deletions
diff --git a/include/libssh/callbacks.h b/include/libssh/callbacks.h
index f3e8f006..b7047d65 100644
--- a/include/libssh/callbacks.h
+++ b/include/libssh/callbacks.h
@@ -277,59 +277,7 @@ struct ssh_threads_callbacks_struct {
LIBSSH_API int ssh_threads_set_callbacks(struct ssh_threads_callbacks_struct
*cb);
-/** @brief Defines the needed callbacks for pthread. Use this if your
- * OS supports libpthread and want to use it for threading.
- * @code
- * #include <libssh/callbacks.h>
- * #include <errno.h>
- * #include <pthread.h>
- * SSH_THREADS_PTHREAD(ssh_pthread_callbacks);
- * int main(){
- * ssh_init_set_threads_callbacks(&ssh_pthread_callbacks);
- * ssh_init();
- * ...
- * }
- * @endcode
- * @param name name of the structure to be declared, containing the
- * callbacks for threading
- *
- */
-#define SSH_THREADS_PTHREAD(name) \
-static int ssh_pthread_mutex_init (void **priv){ \
- int err = 0; \
- *priv = malloc (sizeof (pthread_mutex_t)); \
- if (*priv==NULL) \
- return ENOMEM; \
- err = pthread_mutex_init (*priv, NULL); \
- if (err != 0){ \
- free (*priv); \
- *priv=NULL; \
- } \
- return err; \
-} \
-static int ssh_pthread_mutex_destroy (void **lock) { \
- int err = pthread_mutex_destroy (*lock); \
- free (*lock); \
- *lock=NULL; \
- return err; \
-} \
-static int ssh_pthread_mutex_lock (void **lock) { \
- return pthread_mutex_lock (*lock); \
-} \
-static int ssh_pthread_mutex_unlock (void **lock){ \
- return pthread_mutex_unlock (*lock); \
-} \
-static unsigned long ssh_pthread_thread_id (void){ \
- return (unsigned long) pthread_self(); \
-} \
-static struct ssh_threads_callbacks_struct name= \
-{ \
- .mutex_init=ssh_pthread_mutex_init, \
- .mutex_destroy=ssh_pthread_mutex_destroy, \
- .mutex_lock=ssh_pthread_mutex_lock, \
- .mutex_unlock=ssh_pthread_mutex_unlock, \
- .thread_id=ssh_pthread_thread_id \
-}
+extern struct ssh_threads_callbacks_struct ssh_pthread_callbacks;
/** @} */
#ifdef __cplusplus
diff --git a/src/threads.c b/src/threads.c
index 7cac6dbf..51a4ccfb 100644
--- a/src/threads.c
+++ b/src/threads.c
@@ -30,22 +30,6 @@
#include "libssh/priv.h"
#include "libssh/threads.h"
-#ifndef _WIN32
-
-#ifndef HAVE_PTHREAD
-#warning "You do not have any threading library installed. If the linked"
-#warning "application doesn't provide the threading callbacks, you're screwed"
-#endif
-
-
-#ifdef HAVE_PTHREAD
-
-#include <errno.h>
-#include <pthread.h>
-SSH_THREADS_PTHREAD(ssh_pthread_user_callbacks);
-#endif /* HAVE_PTHREAD */
-#endif /* _WIN32 */
-
static struct ssh_threads_callbacks_struct *user_callbacks;
#ifdef HAVE_LIBGCRYPT
@@ -123,13 +107,8 @@ int ssh_threads_init(void){
* already the case
*/
if(user_callbacks == NULL){
-#ifdef HAVE_PTHREAD
- user_callbacks=&ssh_pthread_user_callbacks;
- }
-#else
return SSH_ERROR; // Can't do anything to initialize threading
}
-#endif
/* Then initialize the crypto libraries threading callbacks */
#ifdef HAVE_LIBGCRYPT
diff --git a/src/threads/pthread.c b/src/threads/pthread.c
new file mode 100644
index 00000000..2f62ad3c
--- /dev/null
+++ b/src/threads/pthread.c
@@ -0,0 +1,84 @@
+/*
+ * This file is part of the SSH Library
+ *
+ * Copyright (c) 2010 by Aris Adamantiadis
+ *
+ * The SSH Library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * The SSH Library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the SSH Library; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+ * MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#ifdef HAVE_PTHREAD
+
+#include <errno.h>
+#include <pthread.h>
+
+/** @brief Defines the needed callbacks for pthread. Use this if your
+ * OS supports libpthread and want to use it for threading.
+ * @code
+ * #include <libssh/callbacks.h>
+ * #include <errno.h>
+ * #include <pthread.h>
+ * SSH_THREADS_PTHREAD(ssh_pthread_callbacks);
+ * int main(){
+ * ssh_init_set_threads_callbacks(&ssh_pthread_callbacks);
+ * ssh_init();
+ * ...
+ * }
+ * @endcode
+ * @param name name of the structure to be declared, containing the
+ * callbacks for threading
+ *
+ */
+#define SSH_THREADS_PTHREAD(name) \
+static int ssh_pthread_mutex_init (void **priv){ \
+ int err = 0; \
+ *priv = malloc (sizeof (pthread_mutex_t)); \
+ if (*priv==NULL) \
+ return ENOMEM; \
+ err = pthread_mutex_init (*priv, NULL); \
+ if (err != 0){ \
+ free (*priv); \
+ *priv=NULL; \
+ } \
+ return err; \
+} \
+static int ssh_pthread_mutex_destroy (void **lock) { \
+ int err = pthread_mutex_destroy (*lock); \
+ free (*lock); \
+ *lock=NULL; \
+ return err; \
+} \
+static int ssh_pthread_mutex_lock (void **lock) { \
+ return pthread_mutex_lock (*lock); \
+} \
+static int ssh_pthread_mutex_unlock (void **lock){ \
+ return pthread_mutex_unlock (*lock); \
+} \
+static unsigned long ssh_pthread_thread_id (void){ \
+ return (unsigned long) pthread_self(); \
+} \
+static struct ssh_threads_callbacks_struct name= \
+{ \
+ .mutex_init=ssh_pthread_mutex_init, \
+ .mutex_destroy=ssh_pthread_mutex_destroy, \
+ .mutex_lock=ssh_pthread_mutex_lock, \
+ .mutex_unlock=ssh_pthread_mutex_unlock, \
+ .thread_id=ssh_pthread_thread_id \
+}
+
+SSH_THREADS_PTHREAD(ssh_pthread_user_callbacks);
+#endif /* HAVE_PTHREAD */
diff --git a/tests/unittests/torture_rand.c b/tests/unittests/torture_rand.c
index 87ecd9a6..be4390e1 100644
--- a/tests/unittests/torture_rand.c
+++ b/tests/unittests/torture_rand.c
@@ -12,7 +12,6 @@
#define NUM_LOOPS 20000
#endif
#define NUM_THREADS 100
-SSH_THREADS_PTHREAD(ssh_pthread_callbacks);
static void setup(){
printf("setup\n");