49 #include <openssl/crypto.h> 54 if(mode & CRYPTO_LOCK) {
66 ret = (
unsigned long)pthread_self();
74 lockarray = (pthread_mutex_t *)OPENSSL_malloc(CRYPTO_num_locks() *
75 sizeof(pthread_mutex_t));
76 for(i = 0; i<CRYPTO_num_locks(); i++) {
77 pthread_mutex_init(&(
lockarray[i]), NULL);
80 CRYPTO_set_id_callback((
unsigned long (*)())
thread_id);
88 CRYPTO_set_locking_callback(NULL);
89 for(i = 0; i<CRYPTO_num_locks(); i++)
100 GCRY_THREAD_OPTION_PTHREAD_IMPL;
104 gcry_control(GCRYCTL_SET_THREAD_CBS);
112 "https://www.example.com/",
113 "https://www2.example.com/",
114 "https://www3.example.com/",
115 "https://www4.example.com/",
134 int main(
int argc,
char **argv)
147 for(i = 0; i<
NUMT; i++) {
148 error = pthread_create(&tid[i],
153 fprintf(stderr,
"Couldn't run thread number %d, errno %d\n", i, error);
155 fprintf(stderr,
"Thread %d, gets %s\n", i,
urls[i]);
159 for(i = 0; i<
NUMT; i++) {
160 error = pthread_join(tid[i], NULL);
161 fprintf(stderr,
"Thread %d terminated\n", i);
static pthread_mutex_t * lockarray
#define curl_easy_setopt(handle, option, value)
int main(int argc, char **argv)
CURL_EXTERN CURL * curl_easy_init(void)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
static void init_locks(void)
static void kill_locks(void)
CURL_EXTERN CURLcode curl_global_init(long flags)
curl_global_init() globally initializes curl given a bitwise set of the different features of what to...
static void * pull_one_url(void *url)
static unsigned long thread_id(void)
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl)
static void lock_callback(int mode, int type, char *file, int line)