Hello folks

```
static int type_registered = 0;

qd_router_t *qd_router(qd_dispatch_t *qd, qd_router_mode_t mode, const char
*area, const char *id)
{
    if (!type_registered) {
        type_registered = 1;
        qd_container_register_node_type(qd, &router_node);
    }
```
https://github.com/apache/qpid-dispatch/blob/d8800269d3a80225794be9914b5fc9f8d6118d04/src/router_node.c#L1623-L1630

I'd like to understand the motivation behind this code better.

Some parts of the codebase assume that there may be many qd_dispatch_t
instances around, while others assume there is only one. There is the
`dispatch` global variable in python_embedded.c, there is the global flag
`type_registered` here, but the `qd_dispatch_t` pointer is usually passed
through function argument (as if there could be more than one).

Having this check for `type_registered` prevents me from stopping and
freeing one instance of a router, then immediately starting another in the
same process. I want to do this for testing purposes. What happens now is
that the second router I start will not function correctly; deleting this
type_registered logic makes it work right (as far as my tests so far are
concerned).

It seems to me that it should be perfectly ok to have multiple dispatch
instances in the single process, as long as there is only one at a time.
-- 
Mit freundlichen Grüßen / Kind regards
Jiri Daněk

Reply via email to