Let's say the cwnd currently is set to 100. And TCP (Reno) sends out the whole window. And the first packet gets lost. So basically the window should be set to approx half. But won't that cause the other unacked packets to be sent again. What does tcp do in this scenario?
The congestion window (CWND) would be cut in half, which in your example would be 50, and now your ssthresh. The CWND would be 1 due to the packet loss. The other packets would be sent again in subsequent RTTs but only after the lost packet has been sent and an ACK received. So, packet 100 would be sent, and when an ACK is received for said packet, then packets 101 and 102 would be retransmitted, so on and so forth.
In the attached figure, see the red boxes. The protocol I described takes place no matter the state: slow start, congestion avoidance, or fast recovery.