On 06/22/2016 02:29 PM, Amos Jeffries wrote:
On 22/06/2016 10:42 p.m., Christos Tsantilas wrote:
On 06/22/2016 07:32 AM, Amos Jeffries wrote:
On 22/06/2016 1:02 p.m., Alex Rousskov wrote:
On 06/21/2016 04:00 AM, Amos Jeffries wrote:
...

In the patch I'm working on now its looking very much like we can drop
the reset() method for these instances and just use a temporary local
object. Like so:

The above code becomes:

   Security::CertPointer serverCert;
   if (...) {
     // We need to lock here because the destructor of
     // serverCert will call X509_free and decrease the lock

     // operator =() copy-assign does the lock stuff

     serverCert = serverBump->serverCert;

   } else {
     // We do not need to lock here, the SSL_get_peer_certificate
     // already increases the clock counter and we have to
     // free with X509_free.

     // CertPointer() constructor builds object without locking it
     // assuming SSL_get_peer_certificate() did the lock for it.

     // operator =() move-assign or copy-assign does the lock stuff

     serverCert = Security::CertPointer(SSL_get_peer_certificate(ssl)));
   }
   // serverCert::~serverCert() called on function
   // leave, calling X509_free.


So long as we only construct LockingPointer from freshly minted OpenSSL
raw-pointers that have an OpenSSL set lock. Then we do not need the
non-locking reset() operation.
We do need the locking reset*() method for the cases where the raw
pointer is not locked by the library.

If we are going to implement and use "=" operator instead of reset method, then we should implement LockingPointer as a new full locking pointer, not a TidyPointer class.

I think this is will work.
The copy contructor and '=' operators should increase the lock, but a cunstructor which takes as argument the raw openSSL object (eg an "X509 *") should not increase the lock. However this is maybe is more confusing than the existing reset/resetAndLock scheme.

But I believe, this is will not solve your original problem, where you needed TidyPointer instead of LockingPointer.
_______________________________________________
squid-dev mailing list
[email protected]
http://lists.squid-cache.org/listinfo/squid-dev

Reply via email to