decoder_thread: unlock the decoder while checking the stream
This is only a slight change to the previous locking behaviour: keep the decoder unlocked during the loop, and lock it only while checking decoder_control.command.
This commit is contained in:
		| @@ -121,12 +121,11 @@ decoder_run_song(struct decoder_control *dc, | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	decoder_lock(dc); | ||||
|  | ||||
| 	/* wait for the input stream to become ready; its metadata | ||||
| 	   will be available then */ | ||||
|  | ||||
| 	while (!input_stream.ready) { | ||||
| 		decoder_lock(dc); | ||||
| 		if (dc->command == DECODE_COMMAND_STOP) { | ||||
| 			decoder_unlock(dc); | ||||
| 			input_stream_close(&input_stream); | ||||
| @@ -136,6 +135,7 @@ decoder_run_song(struct decoder_control *dc, | ||||
| 		} | ||||
|  | ||||
| 		decoder_unlock(dc); | ||||
|  | ||||
| 		ret = input_stream_buffer(&input_stream); | ||||
| 		if (ret < 0) { | ||||
| 			input_stream_close(&input_stream); | ||||
| @@ -143,10 +143,10 @@ decoder_run_song(struct decoder_control *dc, | ||||
| 			dc->state = DECODE_STATE_ERROR; | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		decoder_lock(dc); | ||||
| 	} | ||||
|  | ||||
| 	decoder_lock(dc); | ||||
|  | ||||
| 	if (dc->command == DECODE_COMMAND_STOP) { | ||||
| 		decoder_unlock(dc); | ||||
| 		input_stream_close(&input_stream); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann