> Hello,
> 
> Are you sure you appended the whole thing?
> I do not see the last_state being used for anything.

I'm sorry. last_session_state should be the right side.
This is the revised version. This is diff against the
upstream code checked out from its cvs repository.

Masatake YAMATO

*** lanplus.c.~1.72.~   2012-07-11 01:01:09.000000000 +0900
--- lanplus.c   2012-10-29 15:31:19.929332293 +0900
***************
*** 2091,2096 ****
--- 2091,2097 ----
        int                   xmit = 1;
        time_t                ltime;
        uint32_t              timeout;
+       enum LANPLUS_SESSION_STATE last_session_state;
  
        if (!intf->opened && intf->open && intf->open(intf) < 0)
                return NULL;
***************
*** 2233,2238 ****
--- 2234,2240 ----
                usleep(100);                    /* Not sure what this is for */
  
                /* Remember our connection state */
+               last_session_state = session->v2_data.session_state;
                switch (payload->payload_type)
                {
                case IPMI_PAYLOAD_TYPE_RMCP_OPEN_REQUEST:
***************
*** 2302,2307 ****
--- 2304,2318 ----
                if (xmit) {
                        /* increment session timeout by 1 second each retry */
                        timeout++;
+ 
+                       /* Roll back the state transition */
+                       switch (payload->payload_type)
+                       {
+                       case IPMI_PAYLOAD_TYPE_RMCP_OPEN_REQUEST:
+                       case IPMI_PAYLOAD_TYPE_RAKP_1:
+                       case IPMI_PAYLOAD_TYPE_RAKP_3:
+                               session->v2_data.session_state = 
last_session_state;
+                       }
                }
  
                try++;

Reply via email to