Yeah! That works well for me, and has a minimal configuration overhead.

On Thu, Oct 12, 2017 at 12:32 AM, Miroslav Lichvar <mlich...@redhat.com> wrote:
> On Thu, Aug 10, 2017 at 11:26:27AM -0700, Cliff Spradlin wrote:
>> This moves the burden of maintaining the socket file to the manager of
>> the ptp4l process. However, maintaining a single instance of ptp4l is
>> already the responsibility of the process manager. It's more
>> straightforward for process managers to manage processes than to clean
>> up files after a process exits.
>>
>> I think a better approach would be to acquire a lockfile/pidfile on
>> startup. If the lock fails, then exit immediately with a failure.
>> Normal process managers would stay unchanged, and administrators won't
>> be able to accidentally start a second copy of ptp4l by hand.
>
> If ptp4l refused to start without the UDS port, the socket itself
> could work as a lockfile, right? There would just need to be an option
> to disable the socket.
>
>> People who intend to run more than one instance of ptp4l would either
>> need to disable the lockfile or choose a different name for the file.
>> Alternatively, we could make the lockfile disabled by default, enabled
>> by configuration.
>>
>> On Thu, Aug 10, 2017 at 4:38 AM, Miroslav Lichvar <mlich...@redhat.com> 
>> wrote:
>> > When a second instance of ptp4l using the same configuration was
>> > (accidentally) started, it removed the Unix domain socket of the first
>> > instance and prevented communication with it.
>> >
>> > Remove the unlink() call to let bind() of the second instance fail and
>> > run with the UDS port in faulty state.
>> >
>> > If the socket is not removed on ptp4l exit (e.g. due to crash), the user
>> > will have to remove it manually in order to get a working UDS port
>> > again.
>> > ---
>> >  uds.c | 2 --
>> >  1 file changed, 2 deletions(-)
>> >
>> > diff --git a/uds.c b/uds.c
>> > index d5e8f50..a12d641 100644
>> > --- a/uds.c
>> > +++ b/uds.c
>> > @@ -69,8 +69,6 @@ static int uds_open(struct transport *t, const char 
>> > *name, struct fdarray *fda,
>> >         sa.sun_family = AF_LOCAL;
>> >         strncpy(sa.sun_path, name, sizeof(sa.sun_path) - 1);
>> >
>> > -       unlink(name);
>> > -
>> >         err = bind(fd, (struct sockaddr *) &sa, sizeof(sa));
>> >         if (err < 0) {
>> >                 pr_err("uds: bind failed: %m");
>> > --
>> > 2.9.3
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Check out the vibrant tech community on one of the world's most
>> > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> > _______________________________________________
>> > Linuxptp-devel mailing list
>> > Linuxptp-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/linuxptp-devel
>>
>
> --
> Miroslav Lichvar

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to