After some debugging, figured out that the expirationDate of Facebook *m_pFacebook object has not been updated, therefore the _lastAccessTokenUpdate is still in [NSDate distantPast]. The solution is to call
[m_pFacebook fbDialogLogin:session.accessToken expirationDate:session.expirationDate];
when sessionStateChanged to FBSessionStateOpen
- (void) sessionStateChanged:(FBSession*)session state:(FBSessionState)state error:(NSError*)error {
switch ( state ) {
case FBSessionStateOpen:
[m_pFacebook fbDialogLogin:session.accessToken expirationDate:session.expirationDate];
break;
}
}