Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
T
TLMSP curl
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CYBER - Cyber Security
TS 103 523 MSP
TLMSP
TLMSP curl
Commits
c054b8bf
Commit
c054b8bf
authored
15 years ago
by
Yang Tse
Browse files
Options
Downloads
Patches
Plain Diff
Constantine Sapuntzakis provided initial thread abstraction layer
parent
340ab2f8
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
lib/Makefile.inc
+2
-2
2 additions, 2 deletions
lib/Makefile.inc
lib/curl_threads.c
+124
-0
124 additions, 0 deletions
lib/curl_threads.c
lib/curl_threads.h
+58
-0
58 additions, 0 deletions
lib/curl_threads.h
with
184 additions
and
2 deletions
lib/Makefile.inc
+
2
−
2
View file @
c054b8bf
...
...
@@ -11,7 +11,7 @@ CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
inet_ntop.c parsedate.c
select
.c gtls.c sslgen.c tftp.c splay.c
\
strdup.c socks.c ssh.c nss.c qssl.c rawstr.c curl_addrinfo.c
\
socks_gssapi.c socks_sspi.c curl_sspi.c slist.c nonblock.c
\
curl_memrchr.c imap.c pop3.c smtp.c pingpong.c rtsp.c
curl_memrchr.c imap.c pop3.c smtp.c pingpong.c rtsp.c
curl_threads.c
HHEADERS
=
arpa_telnet.h netrc.h file.h timeval.h qssl.h hostip.h
\
progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h
\
...
...
@@ -23,4 +23,4 @@ HHEADERS = arpa_telnet.h netrc.h file.h timeval.h qssl.h hostip.h \
transfer.h
select
.h easyif.h multiif.h parsedate.h sslgen.h gtls.h
\
tftp.h sockaddr.h splay.h strdup.h setup_once.h socks.h ssh.h nssg.h
\
curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h slist.h nonblock.h
\
curl_memrchr.h imap.h pop3.h smtp.h pingpong.h rtsp.h
curl_memrchr.h imap.h pop3.h smtp.h pingpong.h rtsp.h
curl_threads.h
This diff is collapsed.
Click to expand it.
lib/curl_threads.c
0 → 100644
+
124
−
0
View file @
c054b8bf
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* $Id$
***************************************************************************/
#include
"setup.h"
#if defined(USE_THREADS_POSIX)
# ifdef HAVE_PTHREAD_H
# include <pthread.h>
# endif
#elif defined(USE_THREADS_WIN32)
# ifdef HAVE_PROCESS_H
# include <process.h>
# endif
#endif
#include
"curl_threads.h"
#define _MPRINTF_REPLACE
/* use our functions only */
#include
<curl/mprintf.h>
#include
"curl_memory.h"
/* The last #include file should be: */
#include
"memdebug.h"
#if defined(USE_THREADS_POSIX)
struct
curl_actual_call
{
unsigned
int
(
*
func
)(
void
*
);
void
*
arg
;
};
static
void
*
curl_thread_create_thunk
(
void
*
arg
)
{
struct
curl_actual_call
*
ac
=
arg
;
unsigned
int
(
*
func
)(
void
*
)
=
ac
->
func
;
void
*
real_arg
=
ac
->
arg
;
free
(
ac
);
(
*
func
)(
real_arg
);
return
0
;
}
curl_thread_t
Curl_thread_create
(
unsigned
int
(
*
func
)
(
void
*
),
void
*
arg
)
{
curl_thread_t
t
;
struct
curl_actual_call
*
ac
=
malloc
(
sizeof
(
struct
curl_actual_call
));
if
(
!
ac
)
return
curl_thread_t_null
;
ac
->
func
=
func
;
ac
->
arg
=
arg
;
if
(
pthread_create
(
&
t
,
NULL
,
curl_thread_create_thunk
,
ac
)
!=
0
)
{
free
(
ac
);
return
curl_thread_t_null
;
}
return
t
;
}
void
Curl_thread_destroy
(
curl_thread_t
hnd
)
{
if
(
hnd
!=
curl_thread_t_null
)
pthread_detach
(
hnd
);
}
int
Curl_thread_join
(
curl_thread_t
*
hnd
)
{
int
ret
=
(
pthread_join
(
*
hnd
,
NULL
)
==
0
);
*
hnd
=
curl_thread_t_null
;
return
ret
;
}
#elif defined(USE_THREADS_WIN32)
curl_thread_t
Curl_thread_create
(
unsigned
int
(
CURL_STDCALL
*
func
)
(
void
*
),
void
*
arg
)
{
#ifdef _WIN32_WCE
return
CreateThread
(
NULL
,
0
,
func
,
arg
,
0
,
NULL
);
#else
return
(
curl_thread_t
)
_beginthreadex
(
NULL
,
0
,
func
,
arg
,
0
,
NULL
);
#endif
}
void
Curl_thread_destroy
(
curl_thread_t
hnd
)
{
CloseHandle
(
hnd
);
}
int
Curl_thread_join
(
curl_thread_t
*
hnd
)
{
int
ret
=
(
WaitForSingleObject
(
*
hnd
,
INFINITE
)
==
WAIT_OBJECT_0
);
Curl_thread_destroy
(
*
hnd
);
*
hnd
=
curl_thread_t_null
;
return
ret
;
}
#endif
/* USE_THREADS_* */
This diff is collapsed.
Click to expand it.
lib/curl_threads.h
0 → 100644
+
58
−
0
View file @
c054b8bf
#ifndef HEADER_CURL_THREADS_H
#define HEADER_CURL_THREADS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* $Id$
***************************************************************************/
#include
"setup.h"
#if defined(USE_THREADS_POSIX)
# define CURL_STDCALL
# define curl_mutex_t pthread_mutex_t
# define curl_thread_t pthread_t
# define curl_thread_t_null (pthread_t)0
# define Curl_mutex_init(m) pthread_mutex_init(m, NULL)
# define Curl_mutex_acquire(m) pthread_mutex_lock(m)
# define Curl_mutex_release(m) pthread_mutex_unlock(m)
# define Curl_mutex_destroy(m) pthread_mutex_destroy(m)
#elif defined(USE_THREADS_WIN32)
# define CURL_STDCALL __stdcall
# define curl_mutex_t CRITICAL_SECTION
# define curl_thread_t HANDLE
# define curl_thread_t_null (HANDLE)0
# define Curl_mutex_init(m) InitializeCriticalSection(m)
# define Curl_mutex_acquire(m) EnterCriticalSection(m)
# define Curl_mutex_release(m) LeaveCriticalSection(m)
# define Curl_mutex_destroy(m) DeleteCriticalSection(m)
#endif
#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
curl_thread_t
Curl_thread_create
(
unsigned
int
(
CURL_STDCALL
*
func
)
(
void
*
),
void
*
arg
);
void
Curl_thread_destroy
(
curl_thread_t
hnd
);
int
Curl_thread_join
(
curl_thread_t
*
hnd
);
#endif
/* USE_THREADS_POSIX || USE_THREADS_WIN32 */
#endif
/* HEADER_CURL_THREADS_H */
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment