Index: common/state.c
===================================================================
--- common/state.c	(revision 1355)
+++ common/state.c	(working copy)
@@ -68,10 +68,12 @@
 
 static void route_event(StateMachine * sm, gint event)
 {
-	StateFunc curr_state;
+	StateFunc curr_state = NULL;
 	gpointer user_data;
 
-	curr_state = sm_current(sm);
+	if (sm->stack_ptr >= 0)
+		curr_state = sm_current(sm);
+
 	user_data = sm->user_data;
 	if (user_data == NULL)
 		user_data = sm;
@@ -89,20 +91,22 @@
 
 	switch (event) {
 	case SM_ENTER:
-		curr_state(user_data, event);
+		if (curr_state)
+			curr_state(user_data, event);
 		break;
 	case SM_INIT:
-		curr_state(user_data, event);
+		if (curr_state)
+			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 && curr_state(user_data, event))
 			break;
 		sm_cancel_prefix(sm);
 		if (!sm->is_dead
-		    && sm->global !=NULL && sm->global (user_data, event))
+		    && sm->global != NULL && sm->global (user_data, event))
 			break;
 
 		sm_cancel_prefix(sm);
@@ -112,7 +116,8 @@
 	case SM_NET_CLOSE:
 		sm_close(sm);
 	default:
-		curr_state(user_data, event);
+		if (curr_state)
+			curr_state(user_data, event);
 		if (!sm->is_dead && sm->global !=NULL)
 			sm->global (user_data, event);
 		break;