[fpc-devel] simpleipc issues

Ondrej Pokorny lazarus at kluug.net
Tue Sep 15 09:52:02 CEST 2015


On 15.09.2015 08:58, Michael Van Canneyt wrote:
> On Mon, 14 Sep 2015, Ondrej Pokorny wrote:
>
>> I've developed a "single/multiple instances" feature for the Lazarus 
>> IDE. For this feature I need an IPC. First I tried to use simpleipc 
>> but I have struggled on bugs and missing functionality.
>>
>> Particularly what I found:
>> 1.) BUG: You can register multiple servers on Windows with the same 
>> name (with StartServer procedure).
>> 2.) Small issue: simpleipc uses exceptions if something fails (e.g. 
>> in StartServer procedure). I would prefer using a function with 
>> boolean result (true = OK, false = fail).
>> 3.) MISSING: Multiple clients (from different processes) talk to one 
>> server.
>> 4.) MISSING: Client is able to receive a response on a request.
>> 5.) MISSING: (Optionally, not default) client sends a request to a 
>> server that isn't running. The server is able to handle these 
>> requests when it is started.
>>
>> So I developed "advancedipc.pas" that does what I need. It can do 
>> everything that is in simpleirc but a little bit differently (I 
>> changed the exception behavior and also method names). The question 
>> is now what to do?
>> 1.) Include advancedipc.pas into FCL as a standalone unit.
>> 2.) Make advancedipc.pas backwards compatible to simpleipc.pas and 
>> use the new code in simpleipc.pas.
>
> Well, both 1 and 2 are the way to go if you want it included in FPC :-)
>
> I see no point in including duplicate functionality, it means 
> duplicate maintenance. You can keep it as separate units, just make 
> sure simpleipc runs on top of advancedipc.
>
> As for no semaphores on linux: of course there are semaphores, they 
> exist since many many years, they are part of POSIX: "man sem_overview".
>
> Michael.

Thanks a lot Michael!

I'll prepare it, write (unit) tests and some demo and then send them 
over! Thanks also for the semaphore information. I couldn't find 
anything on the internet, therefore I thought Lazarus doesn't support them.

Are there some high level crossplatform semaphore functions in the FCL? 
The cthreads/cIntSemaphoreOpen etc. seem to be available on unix only. 
What about OS/2?

What about Windows? It looks like semaphores are supported only since 
XP: 
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682438(v=vs.85).aspx 
. Is this a problem for the FCL? (Basically, semaphores are only needed 
on unix due to the file locking. But I am still interested.)

If I'll have more questions, I'll write them here.

Ondrej



More information about the fpc-devel mailing list