diff --git a/Documentation/Documentation-Contents.md b/Documentation/Documentation-Contents.md index a7a92d999..ddfd54ba4 100644 --- a/Documentation/Documentation-Contents.md +++ b/Documentation/Documentation-Contents.md @@ -1,3 +1,4 @@ + [Search page for MaxScale Documentation](http://mariadb-corporation.github.io/MaxScale/Search/) # Contents @@ -19,8 +20,8 @@ ## Upgrading MaxScale -- [Upgrading MaxScale from 1.1.1 to 1.2.0](Upgrading-To-MaxScale-1.2.0.md) -- [Upgrading MaxScale from 1.0.5 to 1.1.0](Upgrading-To-MaxScale-1.1.0.md) +- [Upgrading MaxScale from 1.1.1 to 1.2.0](Upgrading/Upgrading-To-MaxScale-1.2.0.md) +- [Upgrading MaxScale from 1.0.5 to 1.1.0](Upgrading/Upgrading-To-MaxScale-1.1.0.md) ## Reference diff --git a/Documentation/Upgrading-To-MaxScale-1.1.0.md b/Documentation/Upgrading/Upgrading-To-MaxScale-1.1.0.md similarity index 100% rename from Documentation/Upgrading-To-MaxScale-1.1.0.md rename to Documentation/Upgrading/Upgrading-To-MaxScale-1.1.0.md diff --git a/Documentation/Upgrading-To-MaxScale-1.2.0.md b/Documentation/Upgrading/Upgrading-To-MaxScale-1.2.0.md similarity index 100% rename from Documentation/Upgrading-To-MaxScale-1.2.0.md rename to Documentation/Upgrading/Upgrading-To-MaxScale-1.2.0.md diff --git a/server/core/poll.c b/server/core/poll.c index be8a84eb6..19816f155 100644 --- a/server/core/poll.c +++ b/server/core/poll.c @@ -370,24 +370,25 @@ poll_remove_dcb(DCB *dcb) /** * Only positive fds can be removed from epoll set. - * Cloned DCBs are in the epoll set but do not have a valid file descriptor. - */ - if (dcb->fd > 0) { - rc = epoll_ctl(epoll_fd, EPOLL_CTL_DEL, dcb->fd, &ev); - /** - * The poll_resolve_error function will always - * return 0 or crash. So if it returns non-zero result, - * things have gone wrong and we crash. - */ - if (rc) rc = poll_resolve_error(dcb, errno, false); - if (rc) raise(SIGABRT); + * Cloned DCBs can have a state of DCB_STATE_POLLING but are not in + * the epoll set and do not have a valid file descriptor. Hence the + * only action for them is already done - the change of state to + * DCB_STATE_NOPOLLING. + */ + spinlock_release(&dcb->dcb_initlock); + if (dcb->fd > 0) + { + rc = epoll_ctl(epoll_fd, EPOLL_CTL_DEL, dcb->fd, &ev); + /** + * The poll_resolve_error function will always + * return 0 or crash. So if it returns non-zero result, + * things have gone wrong and we crash. + */ + if (rc) rc = poll_resolve_error(dcb, errno, false); + if (rc) raise(SIGABRT); + /*< Set bit for each maxscale thread */ + bitmask_copy(&dcb->memdata.bitmask, poll_bitmask()); } - else - { - rc = 0; - } - /*< Set bit for each maxscale thread */ - bitmask_copy(&dcb->memdata.bitmask, poll_bitmask()); return rc; }