--- openssl-SNAP-20030612/crypto/err/err.c	2003-06-12 00:00:21.000000000 +0200
+++ /root/err.c	2003-06-14 05:01:43.000000000 +0200
@@ -652,6 +652,8 @@
 	}
 #endif
 	es=ERR_get_state();
+	if(es->disabled)
+		return;
 
 	es->top=(es->top+1)%ERR_NUM_ERRORS;
 	if (es->top == es->bottom)
@@ -669,6 +671,8 @@
 	ERR_STATE *es;
 
 	es=ERR_get_state();
+	if(es->disabled)
+		return;
 
 	for (i=0; i<ERR_NUM_ERRORS; i++)
 		{
@@ -720,6 +724,8 @@
 	unsigned long ret;
 
 	es=ERR_get_state();
+	if(es->disabled)
+		return 0;
 
 	if (inc && top)
 		{
@@ -958,6 +964,7 @@
 		{
 		ret=(ERR_STATE *)OPENSSL_malloc(sizeof(ERR_STATE));
 		if (ret == NULL) return(&fallback);
+		ret->disabled = 0;
 		ret->pid=pid;
 		ret->top=0;
 		ret->bottom=0;
@@ -993,6 +1000,8 @@
 	int i;
 
 	es=ERR_get_state();
+	if(es->disabled)
+		return;
 
 	i=es->top;
 	if (i == 0)
@@ -1049,6 +1058,8 @@
 	ERR_STATE *es;
 
 	es=ERR_get_state();
+	if(es->disabled)
+		return 1;
 
 	if (es->bottom == es->top) return 0;
 	es->err_flags[es->top]|=ERR_FLAG_MARK;
@@ -1060,6 +1071,8 @@
 	ERR_STATE *es;
 
 	es=ERR_get_state();
+	if(es->disabled)
+		return 1;
 
 	while(es->bottom != es->top
 		&& (es->err_flags[es->top] & ERR_FLAG_MARK) == 0)
@@ -1073,3 +1086,45 @@
 	es->err_flags[es->top]&=~ERR_FLAG_MARK;
 	return 1;
 	}
+
+void ERR_disable()
+	{
+	ERR_STATE *es;
+
+	es=ERR_get_state();
+	es->disabled++;
+	}
+
+void ERR_enable()
+	{
+	ERR_STATE *es;
+
+	es=ERR_get_state();
+	es->disabled--;
+	if(es->disabled < 0)
+		es->disabled = 0;
+	}
+
+void ERR_force_enable()
+	{
+	ERR_STATE *es;
+
+	es=ERR_get_state();
+	es->disabled=0;
+	}
+
+int ERR_get_lock_status()
+	{
+	ERR_STATE *es;
+
+	es=ERR_get_state();
+	return es->disabled;
+	}
+
+void ERR_set_lock_status(int counter)
+	{
+	ERR_STATE *es;
+
+	es=ERR_get_state();
+	es->disabled = counter;
+	}
