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