diff --git a/src/lib-sieve/util/program-client.c b/src/lib-sieve/util/program-client.c
index 7f0d8e26e8c82699db58eb31fff721487725f94c..1b9b2621818ee15ab4abf3d4963ab39d262682d0 100644
--- a/src/lib-sieve/util/program-client.c
+++ b/src/lib-sieve/util/program-client.c
@@ -48,10 +48,10 @@ static int program_client_close_output(struct program_client *pclient)
 {
 	int ret;
 
-	if ( (ret=pclient->close_output(pclient)) < 0 )
-		return -1;
 	if ( pclient->program_output != NULL )
 		o_stream_destroy(&pclient->program_output);
+	if ( (ret=pclient->close_output(pclient)) < 0 )
+		return -1;
 	pclient->program_output = NULL;
 
 	return ret;