added MIO_DEV_CAP_WATCH_STARTED to fix a bug

This commit is contained in:
hyung-hwan 2020-05-24 02:04:07 +00:00
parent 1f8372f35d
commit bf595d51f1
4 changed files with 9 additions and 7 deletions

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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;