Question about OpenSSL id_function() and pthreads

Daniel Eischen eischen at pcnet.com
Wed May 28 17:07:27 PDT 2003


On Wed, 28 May 2003, Craig Rodrigues wrote:

> Hi,
> 
> I previously asked this question on freebsd-security@ and
> freebsd-current@ :
> 
> http://docs.freebsd.org/cgi/getmsg.cgi?fetch=63674+0+archive/2003/freebsd-security/20030302.freebsd-security
> 
> 
> Let me try again, now that there is a freebsd-threads mailing list.
> 
> 
> On the following OpenSSL web page:
> http://www.openssl.org/docs/crypto/threads.html
> 
> "void CRYPTO_set_id_callback(unsigned long (*id_function)(void));
> 
> id_function(void) is a function that returns a thread ID. 
> It is not needed on Windows nor on platforms where getpid() returns 
> a different ID for each thread (most notably Linux)."
> 
> 
> I have some third party C++ code which tries to implements this function:
> 
> tatic unsigned long
> idFunction()
> {
> #ifdef _WIN32
>     return static_cast<unsigned long>(GetCurrentThreadId());
> #else
>     return static_cast<unsigned long>(pthread_self());
> #endif
> }
> 
> 
> This code does not compile on FreeBSD-CURRENT:
> 
> OpenSSLPluginI.cpp: In function `long unsigned int idFunction()':
> OpenSSLPluginI.cpp:151: invalid static_cast from type `pthread*' to type `long 
>    unsigned int'

I don't know C++ well (much at all).  What does static_cast do?

The error message makes it look as if you are converting
a "pthread" * to "long unsigned int".  Don't you just
want "unsigned long" instead?

> 
> How can I implement this function properly on FreeBSD?

-- 
Dan Eischen



More information about the freebsd-threads mailing list