don't flush the input on delete unless encoder state is OK
diff --git a/src/libFLAC/stream_encoder.c b/src/libFLAC/stream_encoder.c
index 14f9139..e1ea04e 100644
--- a/src/libFLAC/stream_encoder.c
+++ b/src/libFLAC/stream_encoder.c
@@ -587,14 +587,22 @@
 void FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder)
 {
 	FLAC__ASSERT(0 != encoder);
+
 	if(encoder->protected_->state == FLAC__STREAM_ENCODER_UNINITIALIZED)
 		return;
-	if(encoder->private_->current_sample_number != 0) {
-		encoder->protected_->blocksize = encoder->private_->current_sample_number;
-		process_frame_(encoder, true); /* true => is last frame */
+
+	if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK) {
+		if(encoder->private_->current_sample_number != 0) {
+			encoder->protected_->blocksize = encoder->private_->current_sample_number;
+			process_frame_(encoder, true); /* true => is last frame */
+		}
 	}
+
 	MD5Final(encoder->private_->metadata.data.stream_info.md5sum, &encoder->private_->md5context);
-	encoder->private_->metadata_callback(encoder, &encoder->private_->metadata, encoder->private_->client_data);
+
+	if(encoder->protected_->state == FLAC__STREAM_ENCODER_OK) {
+		encoder->private_->metadata_callback(encoder, &encoder->private_->metadata, encoder->private_->client_data);
+	}
 
 	if(encoder->protected_->verify && 0 != encoder->private_->verify.decoder)
 		FLAC__stream_decoder_finish(encoder->private_->verify.decoder);