mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-11-04 12:12:46 +00:00 
			
		
		
		
	Merge pull request #3985 from libgit2/cmn/threading-update
Update THREADING for OpenSSL 1.1
This commit is contained in:
		
						commit
						eb71490ac2
					
				
							
								
								
									
										40
									
								
								THREADING.md
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								THREADING.md
									
									
									
									
									
								
							@ -62,29 +62,34 @@ general case still affects you if you use ssh.
 | 
			
		||||
General Case
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
By default we use libcurl, which has its own .
 | 
			
		||||
If it's available, by default we use libcurl to provide HTTP tunneling support,
 | 
			
		||||
which may be linked against a number of cryptographic libraries and has its
 | 
			
		||||
own
 | 
			
		||||
[recommendations for thread safety](https://curl.haxx.se/libcurl/c/threadsafe.html).
 | 
			
		||||
 | 
			
		||||
If libcurl was not found or was disabled, libgit2 uses OpenSSL to be
 | 
			
		||||
able to use HTTPS as a transport. This library is made to be
 | 
			
		||||
thread-implementation agnostic, and the users of the library must set
 | 
			
		||||
which locking function it should use. This means that libgit2 cannot
 | 
			
		||||
know what to set as the user of libgit2 may use OpenSSL independently
 | 
			
		||||
and the locking settings must survive libgit2 shutting down.
 | 
			
		||||
If there are no alternative TLS implementations (currently only
 | 
			
		||||
SecureTransport), libgit2 uses OpenSSL in order to use HTTPS as a transport.
 | 
			
		||||
OpenSSL is thread-safe starting at version 1.1.0. If your copy of libgit2 is
 | 
			
		||||
linked against that version, you do not need to take any further steps.
 | 
			
		||||
 | 
			
		||||
Even if libgit2 doesn't use OpenSSL directly, OpenSSL can still be used
 | 
			
		||||
by libssh2 depending on the configuration.  If OpenSSL is used both by
 | 
			
		||||
libgit2 and libssh2, you only need to set up threading for OpenSSL once.
 | 
			
		||||
Older versions of OpenSSL are made to be thread-implementation agnostic, and the
 | 
			
		||||
users of the library must set which locking function it should use. libgit2
 | 
			
		||||
cannot know what to set as the user of libgit2 may also be using OpenSSL independently and
 | 
			
		||||
the locking settings must then live outside the lifetime of libgit2.
 | 
			
		||||
 | 
			
		||||
libgit2 does provide a last-resort convenience function
 | 
			
		||||
Even if libgit2 doesn't use OpenSSL directly, OpenSSL can still be used by
 | 
			
		||||
libssh2 or libcurl depending on the configuration. If OpenSSL is used by
 | 
			
		||||
more than one library, you only need to set up threading for OpenSSL once.
 | 
			
		||||
 | 
			
		||||
If libgit2 is linked against OpenSSL, it provides a last-resort convenience function
 | 
			
		||||
`git_openssl_set_locking()` (available in `sys/openssl.h`) to use the
 | 
			
		||||
platform-native mutex mechanisms to perform the locking, which you may
 | 
			
		||||
rely on if you do not want to use OpenSSL outside of libgit2, or you
 | 
			
		||||
know that libgit2 will outlive the rest of the operations. It is not
 | 
			
		||||
platform-native mutex mechanisms to perform the locking, which you can use
 | 
			
		||||
if you do not want to use OpenSSL outside of libgit2, or you
 | 
			
		||||
know that libgit2 will outlive the rest of the operations. It is then not
 | 
			
		||||
safe to use OpenSSL multi-threaded after libgit2's shutdown function
 | 
			
		||||
has been called.  Note `git_openssl_set_locking()` only works if
 | 
			
		||||
libgit2 uses OpenSSL directly - if OpenSSL is only used as a dependency
 | 
			
		||||
of libssh2 as described above, `git_openssl_set_locking()` is a no-op.
 | 
			
		||||
of libssh2 or libcurl as described above, `git_openssl_set_locking()` is a no-op.
 | 
			
		||||
 | 
			
		||||
If your programming language offers a package/bindings for OpenSSL,
 | 
			
		||||
you should very strongly prefer to use that in order to set up
 | 
			
		||||
@ -96,9 +101,6 @@ See the
 | 
			
		||||
on threading for more details, and http://trac.libssh2.org/wiki/MultiThreading
 | 
			
		||||
for a specific example of providing the threading callbacks.
 | 
			
		||||
 | 
			
		||||
Be also aware that libgit2 does not always link against OpenSSL
 | 
			
		||||
if there are alternatives provided by the system.
 | 
			
		||||
 | 
			
		||||
libssh2 may be linked against OpenSSL or libgcrypt. If it uses OpenSSL,
 | 
			
		||||
see the above paragraphs. If it uses libgcrypt, then you need to
 | 
			
		||||
set up its locking before using it multi-threaded. libgit2 has no
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user