added MIO_DEV_CAP_WATCH_STARTED to fix a bug
This commit is contained in:
		| @ -826,7 +826,6 @@ static int cgi_peer_on_read (mio_dev_pro_t* pro, mio_dev_pro_sid_t sid, const vo | |||||||
|  |  | ||||||
| 		MIO_ASSERT (mio, !(cgi_state->over & CGI_STATE_OVER_READ_FROM_PEER)); | 		MIO_ASSERT (mio, !(cgi_state->over & CGI_STATE_OVER_READ_FROM_PEER)); | ||||||
|  |  | ||||||
| printf ("FEED %d BYTES TO HTRD\n", (int)dlen); |  | ||||||
| 		if (mio_htrd_feed(cgi_state->peer_htrd, data, dlen, &rem) <= -1)  | 		if (mio_htrd_feed(cgi_state->peer_htrd, data, dlen, &rem) <= -1)  | ||||||
| 		{ | 		{ | ||||||
| 			MIO_DEBUG3 (mio, "HTTPS(%p) - unable to feed peer into to htrd - peer %p(pid=%u)\n", cgi_state->htts, pro, (unsigned int)pro->child_pid); | 			MIO_DEBUG3 (mio, "HTTPS(%p) - unable to feed peer into to htrd - peer %p(pid=%u)\n", cgi_state->htts, pro, (unsigned int)pro->child_pid); | ||||||
|  | |||||||
| @ -1044,6 +1044,8 @@ int mio_dev_watch (mio_dev_t* dev, mio_dev_watch_cmd_t cmd, int events) | |||||||
| 	if (dev->dev_cap & MIO_DEV_CAP_VIRTUAL) return 0; | 	if (dev->dev_cap & MIO_DEV_CAP_VIRTUAL) return 0; | ||||||
|  |  | ||||||
| 	/*ev.data.ptr = dev;*/ | 	/*ev.data.ptr = dev;*/ | ||||||
|  | 	dev_cap = dev->dev_cap & ~(DEV_CAP_ALL_WATCHED); | ||||||
|  |  | ||||||
| 	switch (cmd) | 	switch (cmd) | ||||||
| 	{ | 	{ | ||||||
| 		case MIO_DEV_WATCH_START: | 		case MIO_DEV_WATCH_START: | ||||||
| @ -1053,6 +1055,7 @@ int mio_dev_watch (mio_dev_t* dev, mio_dev_watch_cmd_t cmd, int events) | |||||||
| 			 * after this 'switch' block */ | 			 * after this 'switch' block */ | ||||||
| 			events = MIO_DEV_EVENT_IN; | 			events = MIO_DEV_EVENT_IN; | ||||||
| 			mux_cmd = MIO_SYS_MUX_CMD_INSERT; | 			mux_cmd = MIO_SYS_MUX_CMD_INSERT; | ||||||
|  | 			dev_cap |= MIO_DEV_CAP_WATCH_STARTED; | ||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
| 		case MIO_DEV_WATCH_RENEW: | 		case MIO_DEV_WATCH_RENEW: | ||||||
| @ -1072,10 +1075,10 @@ int mio_dev_watch (mio_dev_t* dev, mio_dev_watch_cmd_t cmd, int events) | |||||||
| 			break; | 			break; | ||||||
|  |  | ||||||
| 		case MIO_DEV_WATCH_STOP: | 		case MIO_DEV_WATCH_STOP: | ||||||
| 			if (!(dev->dev_cap & DEV_CAP_ALL_WATCHED)) return 0; /* the device is not being watched */ | 			if (!(dev_cap & MIO_DEV_CAP_WATCH_STARTED)) return 0; /* the device is not being watched */ | ||||||
| 			events = 0; /* override events */ | 			events = 0; /* override events */ | ||||||
| 			mux_cmd = MIO_SYS_MUX_CMD_DELETE; | 			mux_cmd = MIO_SYS_MUX_CMD_DELETE; | ||||||
| 			dev_cap = dev->dev_cap & ~(DEV_CAP_ALL_WATCHED); | 			dev_cap &= ~MIO_DEV_CAP_WATCH_STARTED; | ||||||
| 			goto ctrl_mux; | 			goto ctrl_mux; | ||||||
|  |  | ||||||
| 		default: | 		default: | ||||||
| @ -1083,7 +1086,6 @@ int mio_dev_watch (mio_dev_t* dev, mio_dev_watch_cmd_t cmd, int events) | |||||||
| 			return -1; | 			return -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	dev_cap = dev->dev_cap & ~(DEV_CAP_ALL_WATCHED); |  | ||||||
|  |  | ||||||
| 	/* this function honors MIO_DEV_EVENT_IN and MIO_DEV_EVENT_OUT only | 	/* this function honors MIO_DEV_EVENT_IN and MIO_DEV_EVENT_OUT only | ||||||
| 	 * as valid input event bits. it intends to provide simple abstraction | 	 * as valid input event bits. it intends to provide simple abstraction | ||||||
|  | |||||||
| @ -389,7 +389,8 @@ enum mio_dev_cap_t | |||||||
| 	MIO_DEV_CAP_ACTIVE          = (1 << 15), | 	MIO_DEV_CAP_ACTIVE          = (1 << 15), | ||||||
| 	MIO_DEV_CAP_HALTED          = (1 << 16), | 	MIO_DEV_CAP_HALTED          = (1 << 16), | ||||||
| 	MIO_DEV_CAP_ZOMBIE          = (1 << 17), | 	MIO_DEV_CAP_ZOMBIE          = (1 << 17), | ||||||
| 	MIO_DEV_CAP_RENEW_REQUIRED  = (1 << 18) | 	MIO_DEV_CAP_RENEW_REQUIRED  = (1 << 18), | ||||||
|  | 	MIO_DEV_CAP_WATCH_STARTED   = (1 << 19) | ||||||
| }; | }; | ||||||
| typedef enum mio_dev_cap_t mio_dev_cap_t; | typedef enum mio_dev_cap_t mio_dev_cap_t; | ||||||
|  |  | ||||||
|  | |||||||
| @ -326,7 +326,7 @@ static int dev_sck_make_client (mio_dev_t* dev, void* ctx) | |||||||
| { | { | ||||||
| 	mio_t* mio = dev->mio; | 	mio_t* mio = dev->mio; | ||||||
| 	mio_dev_sck_t* rdev = (mio_dev_sck_t*)dev; | 	mio_dev_sck_t* rdev = (mio_dev_sck_t*)dev; | ||||||
| 	mio_syshnd_t* sck = (mio_syshnd_t*)ctx; | 	mio_syshnd_t* clisckhnd = (mio_syshnd_t*)ctx; | ||||||
|  |  | ||||||
| 	/* create a socket device that is made of a socket connection | 	/* create a socket device that is made of a socket connection | ||||||
| 	 * on a listening socket. | 	 * on a listening socket. | ||||||
| @ -334,7 +334,7 @@ static int dev_sck_make_client (mio_dev_t* dev, void* ctx) | |||||||
| 	 * most of the initialization is done by the listening socket device | 	 * most of the initialization is done by the listening socket device | ||||||
| 	 * after a client socket has been created. */ | 	 * after a client socket has been created. */ | ||||||
|  |  | ||||||
| 	rdev->hnd = *sck; | 	rdev->hnd = *clisckhnd; | ||||||
| 	rdev->tmrjob_index = MIO_TMRIDX_INVALID; | 	rdev->tmrjob_index = MIO_TMRIDX_INVALID; | ||||||
|  |  | ||||||
| 	if (mio_makesckasync(mio, rdev->hnd) <= -1) return -1; | 	if (mio_makesckasync(mio, rdev->hnd) <= -1) return -1; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user