MsgDeliverEvent to non existing process!

Hi,
I have a datas server which allows its clients to register to some
datas. That permit to advise the clients if their concerned values are
modified.
Registration is done via a command sent to its resmgr. Upon this
request, the datas server store the rcvid and the sigevent structure.
I was making some tests with a client and I noted that the client
received several pulses when its datas were modified.
In fact, everytime I interrupt and restart the program, it register to
the datas server, given to it a sigevent structure the SAME coid.
After all, why not as this coid is returned back to the OS, it’s available.
The big problem is that the datas server scan its list of process to
advise on data modification and MsgDeliverEvent() to all concerned
processes.
So, if I slay and restart my client 10 times, I receive 10 pulses on my
coid.
If it’s understandable for the coid, it sounds to me not so good about
the rcvid passed to MsgDeliverEvent.
As a rcvid identify a process with its pid, nid,…, if I slay a process
the rcvid becomes unavailable even if I restart it as it will get a
different pid.
So, what the rcvid is for in MsgDeliverEvent ?

I saw there is some possibilities in ChannelCreate() to solve this
problem but as I use a resmgr, declared with resmgr_attach(), I haven’t
access to _NTO_CHF_COID_DISCONNECT or _NTO_CHF_THREAD_DEATH. What to do?

Regards,
Alain.

Alain Bonnefoy <alain.bonnefoy@icbt.com> wrote:

I saw there is some possibilities in ChannelCreate() to solve this
problem but as I use a resmgr, declared with resmgr_attach(), I haven’t
access to _NTO_CHF_COID_DISCONNECT or _NTO_CHF_THREAD_DEATH. What to do?

resmgr channels will have _NTO_CHF_DISCONNECT on by default, which
means your manager will get a iofunc_close_ocb() callout whenever a
client process terminates the connection (due to explicit close or
being slayed); so during your close handler you scan your list of
installed notifications and remove any for that matching scoid.