208417e
--- trunk/pioneers/common/state.c	2007/10/07 17:58:14	1343
208417e
+++ trunk/pioneers/common/state.c	2007/11/22 21:21:01	1360
208417e
@@ -71,7 +71,11 @@
208417e
 	StateFunc curr_state;
208417e
 	gpointer user_data;
208417e
 
208417e
-	curr_state = sm_current(sm);
208417e
+	if (sm->stack_ptr >= 0)
208417e
+		curr_state = sm_current(sm);
208417e
+	else
208417e
+		curr_state = NULL;
208417e
+
208417e
 	user_data = sm->user_data;
208417e
 	if (user_data == NULL)
208417e
 		user_data = sm;
208417e
@@ -89,16 +93,18 @@
208417e
 
208417e
 	switch (event) {
208417e
 	case SM_ENTER:
208417e
-		curr_state(user_data, event);
208417e
+		if (curr_state != NULL)
208417e
+			curr_state(user_data, event);
208417e
 		break;
208417e
 	case SM_INIT:
208417e
-		curr_state(user_data, event);
208417e
+		if (curr_state != NULL)
208417e
+			curr_state(user_data, event);
208417e
 		if (!sm->is_dead && sm->global !=NULL)
208417e
 			sm->global (user_data, event);
208417e
 		break;
208417e
 	case SM_RECV:
208417e
 		sm_cancel_prefix(sm);
208417e
-		if (curr_state(user_data, event))
208417e
+		if (curr_state != NULL && curr_state(user_data, event))
208417e
 			break;
208417e
 		sm_cancel_prefix(sm);
208417e
 		if (!sm->is_dead
208417e
@@ -112,7 +118,8 @@
208417e
 	case SM_NET_CLOSE:
208417e
 		sm_close(sm);
208417e
 	default:
208417e
-		curr_state(user_data, event);
208417e
+		if (curr_state != NULL)
208417e
+			curr_state(user_data, event);
208417e
 		if (!sm->is_dead && sm->global !=NULL)
208417e
 			sm->global (user_data, event);
208417e
 		break;