diff options
| author | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-23 19:52:05 +0200 | 
|---|---|---|
| committer | Přemysl Janouch <p.janouch@gmail.com> | 2014-09-23 20:41:47 +0200 | 
| commit | 7ee3bbc86bd6ca20fafe5c2c1f70adf3116334c9 (patch) | |
| tree | af9c4c9e1c772024fd923178e78c638bf127c33a | |
| parent | 903f7d128a4a3fe66001e73a7e247b1d07444908 (diff) | |
| download | ponymap-7ee3bbc86bd6ca20fafe5c2c1f70adf3116334c9.tar.gz ponymap-7ee3bbc86bd6ca20fafe5c2c1f70adf3116334c9.tar.xz ponymap-7ee3bbc86bd6ca20fafe5c2c1f70adf3116334c9.zip | |
Fix on_unit_ready()
Got it wrong and lighttpd doesn't have any mercy.
| -rw-r--r-- | ponymap.c | 34 | 
1 files changed, 19 insertions, 15 deletions
| @@ -565,12 +565,15 @@ unit_update_poller (struct unit *u, const struct pollfd *pfd)  static void  on_unit_ready (const struct pollfd *pfd, struct unit *u)  { -	struct transport *transport = u->transport;  	struct service *service = u->service; +	struct transport *transport = u->transport;  	enum transport_io_result result; +	bool got_eof = false; + +	if ((result = transport->on_readable (u)) == TRANSPORT_IO_ERROR) +		goto error; +	got_eof |= result == TRANSPORT_IO_EOF; -	if ((result = transport->on_readable (u))) -		goto exception;  	if (u->read_buffer.len)  	{  		struct str *buf = &u->read_buffer; @@ -581,23 +584,24 @@ on_unit_ready (const struct pollfd *pfd, struct unit *u)  			goto abort;  	} -	if ((result = transport->on_writeable (u))) -		goto exception; +	if ((result = transport->on_writeable (u)) == TRANSPORT_IO_ERROR) +		goto error; +	got_eof |= result == TRANSPORT_IO_EOF; -	unit_update_poller (u, pfd); -	return; - -exception: -	if (result == TRANSPORT_IO_EOF) +	if (got_eof)  	{  		if (service->on_eof)  			service->on_eof (u->service_data, u); +		if (u->abortion_requested || !u->write_buffer.len) +			goto abort;  	} -	else if (result == TRANSPORT_IO_ERROR) -	{ -		if (service->on_error) -			service->on_error (u->service_data, u); -	} + +	unit_update_poller (u, pfd); +	return; + +error: +	if (service->on_error) +		service->on_error (u->service_data, u);  abort:  	unit_abort (u); | 
