s=(SSL_SESSION *)lh_insert(ctx->sessions,(char *)c);
s=(SSL_SESSION *)lh_insert(ctx->sessions,c);
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *c)	{	int ret=0;	SSL_SESSION *s;	/* add just 1 reference count for the SSL_CTX's session cache	 * even though it has two ways of access: each session is in a	 * doubly linked list and an lhash */	CRYPTO_add(&c->references,1,CRYPTO_LOCK_SSL_SESSION);	/* if session c is in already in cache, we take back the increment later */	CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);	s=(SSL_SESSION *)lh_insert(ctx->sessions,(char *)c);		/* s != NULL iff we already had a session with the given PID.	 * In this case, s == c should hold (then we did not really modify	 * ctx->sessions), or we're in trouble. */	if (s != NULL && s != c)		{		/* We *are* in trouble ... */		SSL_SESSION_list_remove(ctx,s);		SSL_SESSION_free(s);		/* ... so pretend the other session did not exist in cache		 * (we cannot handle two SSL_SESSION structures with identical		 * session ID in the same cache, which could happen e.g. when		 * two threads concurrently obtain the same session from an external		 * cache) */		s = NULL;		} 	/* Put at the head of the queue unless it is already in the cache */	if (s == NULL)		SSL_SESSION_list_add(ctx,c);	if (s != NULL)		{		/* existing cache entry -- decrement previously incremented reference		 * count because it already takes into account the cache */		SSL_SESSION_free(s); /* s == c */		ret=0;		}	else		{		/* new cache entry -- remove old ones if cache has become too large */				ret=1;		if (SSL_CTX_sess_get_cache_size(ctx) > 0)			{			while (SSL_CTX_sess_number(ctx) >				SSL_CTX_sess_get_cache_size(ctx))				{				if (!remove_session_lock(ctx,					ctx->session_cache_tail, 0))					break;				else					ctx->stats.sess_cache_full++;				}			}		}	CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);	return(ret);	}