diff options
| author | Devin J. Pohly <djpohly@gmail.com> | 2021-01-18 15:02:15 -0600 | 
|---|---|---|
| committer | Devin J. Pohly <djpohly@gmail.com> | 2021-01-18 15:02:15 -0600 | 
| commit | ab032822958dd3041f478c48498f17e5d259dd6f (patch) | |
| tree | db9a050e094ef54293cc2672ae0d4eb0d43633a2 | |
| parent | 3747b3162ea062fb4630e63cee1a8ad57de87a81 (diff) | |
commit entire output config, or fail and rollback
The wlr-output-management protocol requires that either all of the
changes from an apply request be applied successfully, in which case a
"succeeded" event is sent, or all of the changes are reverted and a
"failed" event is sent.  As written, this could partially commit
changes, then fail.
Test the changes first (even for an "apply" event), then commit or
rollback as appropriate.
| -rw-r--r-- | dwl.c | 13 | 
1 files changed, 8 insertions, 5 deletions
| @@ -1545,11 +1545,14 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test)  			}  		} -		if (test) { -			ok &= wlr_output_test(wlr_output); -			wlr_output_rollback(wlr_output); -		} else -			ok &= wlr_output_commit(wlr_output); +		if (!(ok = wlr_output_test(wlr_output))) +			break; +	} +	wl_list_for_each(config_head, &config->heads, link) { +		if (ok && !test) +			wlr_output_commit(config_head->state.output); +		else +			wlr_output_rollback(config_head->state.output);  	}  	if (ok)  		wlr_output_configuration_v1_send_succeeded(config); | 
