Summary: Checking in fix to TFileTransport to remove redundant behavior of readEvent -- just return NULL or the next event
Also, checking in changes to the php generation code I made awhile ago, but forgot to check in

Reviewed By: aditya, mcslee

Test Plan: Compiled thrift and falcon, and confirmed that falcon's print binary still worked

Revert Plan: revertible


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665245 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index f78a7dc..b913185 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -824,20 +824,22 @@
  * @param tfunction The function
  */
 void t_php_generator::generate_php_function_helpers(t_function* tfunction) {
-  t_struct result(program_, service_name_ + "_" + tfunction->get_name() + "_result");
-  t_field success(tfunction->get_returntype(), "success", 0);
-  if (!tfunction->get_returntype()->is_void()) {
-    result.append(&success);
-  }
+  if (!tfunction->is_async()) {
+    t_struct result(program_, service_name_ + "_" + tfunction->get_name() + "_result");
+    t_field success(tfunction->get_returntype(), "success", 0);
+    if (!tfunction->get_returntype()->is_void()) {
+      result.append(&success);
+    }
 
-  t_struct* xs = tfunction->get_xceptions();
-  const vector<t_field*>& fields = xs->get_members();
-  vector<t_field*>::const_iterator f_iter;
-  for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    result.append(*f_iter);
-  }
+    t_struct* xs = tfunction->get_xceptions();
+    const vector<t_field*>& fields = xs->get_members();
+    vector<t_field*>::const_iterator f_iter;
+    for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
+      result.append(*f_iter);
+    }
 
-  generate_php_struct_definition(f_service_, &result, false);
+    generate_php_struct_definition(f_service_, &result, false);
+  }
 }
 
 /**
diff --git a/lib/cpp/src/transport/TFileTransport.cpp b/lib/cpp/src/transport/TFileTransport.cpp
index 191ec25..8b55715 100644
--- a/lib/cpp/src/transport/TFileTransport.cpp
+++ b/lib/cpp/src/transport/TFileTransport.cpp
@@ -448,7 +448,7 @@
 uint32_t TFileTransport::read(uint8_t* buf, uint32_t len) {
   // check if there an event is ready to be read
   if (!currentEvent_) {
-    readEvent();
+    currentEvent_ = readEvent();
   }
   
   // did not manage to read an event from the file. This could have happened
@@ -467,7 +467,7 @@
              remaining);
     }
     delete(currentEvent_);
-    currentEvent_ = 0;
+    currentEvent_ = NULL;
     return remaining;
   }
   
@@ -477,7 +477,7 @@
   return len;
 }
 
-bool TFileTransport::readEvent() {
+eventInfo* TFileTransport::readEvent() {
   int readTries = 0;
 
   if (!readBuff_) {
@@ -499,7 +499,6 @@
       // read error
       if (readState_.bufferLen_ == -1) {
         readState_.resetAllValues();
-        currentEvent_ = NULL;
         GlobalOutput("TFileTransport: error while reading from file");
         throw TTransportException("TFileTransport: error while reading from file");
       } else if (readState_.bufferLen_ == 0) {  // EOF
@@ -510,14 +509,12 @@
         } else if (readTimeout_ == NO_TAIL_READ_TIMEOUT) {
           // reset state
           readState_.resetState(0);
-          currentEvent_ = NULL;
-          return false;
+          return NULL;
         } else if (readTimeout_ > 0) {
           // timeout already expired once
           if (readTries > 0) {
             readState_.resetState(0);
-            currentEvent_ = NULL;
-            return false;
+            return NULL;
           } else {
             usleep(readTimeout_ * 1000);
             readTries++;
@@ -587,14 +584,14 @@
         // check if the event has been read in full
         if (readState_.event_->eventBuffPos_ == readState_.event_->eventSize_) {
           // set the completed event to the current event
-          currentEvent_ = readState_.event_;
-          currentEvent_->eventBuffPos_ = 0;
+          eventInfo* completeEvent = readState_.event_;
+          completeEvent->eventBuffPos_ = 0;
           
-          readState_.event_ = 0;
+          readState_.event_ = NULL;
           readState_.resetState(readState_.bufferPtr_);
           
           // exit criteria
-          return true;
+          return completeEvent;
         }
       }
     }
diff --git a/lib/cpp/src/transport/TFileTransport.h b/lib/cpp/src/transport/TFileTransport.h
index abd8928..f249ff9 100644
--- a/lib/cpp/src/transport/TFileTransport.h
+++ b/lib/cpp/src/transport/TFileTransport.h
@@ -272,7 +272,7 @@
   void writerThread();
 
   // helper functions for reading from a file
-  bool readEvent();
+  eventInfo* readEvent();
 
   // event corruption-related functions
   bool isEventCorrupted();