RFC: Netx - Implement SingeInstanceService
Andrew Haley
aph at redhat.com
Mon Jun 22 09:15:54 PDT 2009
Omair Majid wrote:
> Hi,
>
> Andrew Haley wrote:
>> Omair Majid wrote:
>>
>>> The attached patch adds support for SingleInstanceService to Netx.
>>>
>>> It creates a lock file under ~/.netx/locks/ once an application adds a
>>> SingleInstanceListener to the SingleInstanceService. A second instance
>>> of the application sees this lock file, sends it's arguments to the
>>> first instance and shuts down.
>>>
>>> ChangeLog:
>>> 2009-06-18 Omair Majid <omajid at redhat.com>
>>>
>>> *rt/net/sourceforge/jnlp/Launcher.java
>>> (launchApplication): Check for any existing single instance.
>>> Dont start a second instance.
>>> *rt/net/sourceforge/jnlp/resources/Messages.properties: Add
>>> RNoLockDir.
>>> *rt/net/sourceforge/jnlp/services/ExtendedSingleInstanceService.java
>>> New file.
>>> *rt/net/sourceforge/jnlp/services/InstanceExistsException.java: New
>>> file.
>>> *rt/net/sourceforge/jnlp/services/ServiceUtil.java
>>> (getSingleInstanceService): New function.
>>> (checkExistingSingleInstance): New function.
>>> *rt/net/sourceforge/jnlp/services/SingleInstanceLock.java: New
>>> file.
>>> *rt/net/sourceforge/jnlp/services/XServiceManagerStub.java: Add
>>> SingleInstanceService to serviceNames. Create a new instance of
>>> XSingleInstanceService as a privileged proxy.
>>> *rt/net/sourceforge/jnlp/services/XSingleInstanceService.java: New
>>> file.
>>>
>>> Any comments?
>>
>> Do you know that the first instance is connected to the same X server?
> Just to be clear, even though the file names begin with X, they dont
> have much to do with the X server. All Linux implementations of jnlp
> services are prefixed with X in Netx.
>
> To answer the question: no. This patch enforces a single instance per
> user rather than per X session. Many other applications (such as
> Firefox) do the same thing.
I am aware of that, of course: it's a famous longstanding Firefox bug.
What I don't know is whether jnlp is supposed to behave the same way;
I can't tell from the javadoc. If it really is supposed to do that, fine.
>> What happens if a stale lock file is left behind by some earlier event?
> This patch never cleans up the lock files. Each lock file contains a
> port number where first instance of the application is listening. If no
> application is listening at the port, then the file is assumed to be
> stale and ignored/overwritten.
Sounds good.
>> Is it good to use NFS for the lock file? Would something in /tmp work
>> better?
> Honestly, I have no clue. Fwiw, Sun's JRE creates lock files under
> ~/.java/ . I have no issues with using /tmp if you think that would work
> better.
It probably is better, yes.
Andrew,
More information about the distro-pkg-dev
mailing list