Comunque no, le due query son ovviamente diverse, è la variabile che prende il result set che ha lo stesso nome ($qry), quindi suppongo si sovrascriva ogni volta rendendo necessario solo un free_result, quello finale... o è come un allocazione di memoria che va deallocata? E' questo il punto...

Va eseguita per 2 volte mysql_free_resulta.

Infatti quando la prima volta esegui:

$qry=mysql_query($sql);

In $qry ci sarà l'identificativo di una risorsa.

Quando di nuovo riesegui la stessa istruzione, in $qry ci sarà di nuovo l'identificativo di una risorsa; l'identificativo però è diverso dal precedente.

Basta che fai echo $sqry dopo le 2 istruzioni e te ne renderai conto.

Devi paragonare l'identificatore della risorsa ad un puntatore di memoria.
Quindi $qry = ... contiene un identificativo ke mi dice dove andare a prendere i dati.

Nel momento in cui tu usi

mysql_free_result($qry);

tu non liberi la memoria della variabile $qry in sé (per questo c'è il comando php unset), ma la memoria ke occupano i dati che hai preso e ke si trovano liddove l'identificativo della risorsa ti dice dove sono.

Ecco perché quando fai per la seconda volta
$qry=mysql_query($sql);

i nuovi dati ke sono presi dal DB vengo messi in una locazione di memoria diversi dalla chiamata precedente.

Ecco perché occorre per 2 volte fare il mysql_free_result($qry).

E comunque alla fine dello script php, automaticamente la memoria allocata per le varie query è deallocata. Quindi se ti dovessi dimenticare qualche mysql_free_result($qry) ci pensa PHP a farlo.

Spero di essere stato abbastanza chiaro.

Ciao.