PORT_Assert( ssl_HaveXmitBufLock(ss) );
PORT_Assert( ss->opt.noLocks || ssl_HaveXmitBufLock(ss) );
ssl_SendSavedWriteData(sslSocket *ss, sslBuffer *buf, sslSendFunc send){    int rv	= 0;    int len	= buf->len;    PORT_Assert( ssl_HaveXmitBufLock(ss) );    if (len != 0) {	SSL_TRC(5, ("%d: SSL[%d]: sending %d bytes of saved data",		     SSL_GETPID(), ss->fd, len));	rv = (*send)(ss, buf->buf, len, 0);	if (rv < 0) {	    return rv;	} 	if (rv < len) {	    /* UGH !! This shifts the whole buffer down by copying it, and 	    ** it depends on PORT_Memmove doing overlapping moves correctly!	    ** It should advance the pointer offset instead !!	    */	    PORT_Memmove(buf->buf, buf->buf + rv, len - rv);	    buf->len = len - rv;	} else {	    buf->len = 0;    	}    }    return rv;}