Blob Blame History Raw
diff --git a/src/FileCopy.cc b/src/FileCopy.cc
index 18426e58..e0d25d8c 100644
--- a/src/FileCopy.cc
+++ b/src/FileCopy.cc
@@ -786,21 +786,23 @@ int FileCopyPeerFA::Do()
       return m;
    }
 
-   if((want_size && size==NO_SIZE_YET && (mode==PUT || !start_transfer))
-   || (want_date && date==NO_DATE_YET))
+   // if we need some info and cannot start the transfer (yet),
+   // then use ARRAY_INFO to fetch the file information.
+   if(((want_size && size==NO_SIZE_YET) || (want_date && date==NO_DATE_YET))
+   && (mode==PUT || !start_transfer) && session->IsClosed())
+   {
+      FileInfo *fi=new FileInfo(file);
+      if(want_size)
+	 fi->Need(fi->SIZE);
+      if(want_date)
+	 fi->Need(fi->DATE);
+      info.Empty();
+      info.Add(fi);
+      session->GetInfoArray(&info);
+      m=MOVED;
+   }
+   if(session->OpenMode()==FA::ARRAY_INFO)
    {
-      if(session->IsClosed())
-      {
-	 FileInfo *fi=new FileInfo(file);
-	 if(want_size)
-	    fi->Need(fi->SIZE);
-	 if(want_date)
-	    fi->Need(fi->DATE);
-	 info.Empty();
-	 info.Add(fi);
-	 session->GetInfoArray(&info);
-	 m=MOVED;
-      }
       res=session->Done();
       if(res==FA::IN_PROGRESS)
 	 return m;