How can I fix this Heimdall Control transfer failed (result -9) for flashing a recovery? I am getting a "WARNING: Control transfer #1 failed. Result: -9" problem that looks like it might be causing a failure for heimdall to flash a recovery to my Samsung Galaxy S Duos GT-S7562 phone.

I am running Ubuntu 13.04 (raring ringtail) and Heimdall v1.4 RC1.  

I have the phone unplugged and off.  Then I turn it on to "download mode" and then press the up key to accept the download mode option.  Then I plug it into the usb cable to the computer.  Then I run the heimdall detect program and find that the device is detected.  Then I run the following to install the custom recovery.  

I obtained the "recovery.img" file from a "recovery.tar" file that I got from a root kit zip file.

Is there a way to get around this error?  What does "-9" mean as an error code?

~$ sudo heimdall flash --RECOVERY /tmp/recovery.img --verbose 
\ Heimdall v1.4 RC1

Copyright (c) 2010-2012, Benjamin Dobell, Glass Echidna
http://www.glassechidna.com.au/

This software is provided free of charge. Copying and redistribution is encouraged.

If you appreciate this software and you would like to support future development please consider donating:
http://www.glassechidna.com.au/donate/

Initialising connection...
Detecting device...
      Manufacturer: "Sasmsung"
           Product: "MSM7x27"

            length: 18
      device class: 2
               S/N: 0
           VID:PID: 04E8:685D
         bcdDevice: 0100
   iMan:iProd:iSer: 1:2:0
          nb confs: 1

interface[0].altsetting[0]: num endpoints = 1
   Class.SubClass.Protocol: 02.02.01
       endpoint[0].address: 82
           max packet size: 0010
          polling interval: 09

interface[1].altsetting[0]: num endpoints = 2
   Class.SubClass.Protocol: 0A.00.00
       endpoint[0].address: 81
           max packet size: 0200
          polling interval: 00
       endpoint[1].address: 01
           max packet size: 0200
          polling interval: 00
Claiming interface...
Setting up interface...

Checking if protocol is initialised...
Protocol is not initialised.
Initialising protocol...
WARNING: Control transfer #1 failed. Result: -9
WARNING: Control transfer #2 failed. Result: -9
WARNING: Control transfer #3 failed. Result: -9
WARNING: Control transfer #4 failed. Result: -9
WARNING: Control transfer #5 failed. Result: -9
WARNING: Control transfer #6 failed. Result: -9
ERROR: Failed to send data: "ODIN"
Releasing device interface...
Second update (success): 

One or more of the following ended up solving my problem (I tried all at once instead of trying each sequentially, sorry!): 


Connect the usb cable directly to computer, not through a hub. 
Use the Heimdall command line option " --RECOVERY" (instead of "--recovery"). 
Use the newer Heimdall 1.4 final. 


Thanks to Evan Carroll for the info borrowed from other questions!