Lars Ellenberg wrote:
>     BTW, looking at those ocf-shellfuncs, did anyone notice that
>       ocf_take_lock is broken, because it's racy?
>       Not sure if/how we should solve that, though.

ln is atomic so this ought to work:

     local tmp
     tmp=$(mktemp "$lockfile.XXXXXX")
     echo "$$" > "$tmp"

     while :
     do
         if ! ocf_pidfile_status "$lockfile"
         then
             ln "$tmp" "$lockfile" 2>/dev/null && break
         fi
         ocf_log info  "Sleeping until $lockfile is released..."
         sleep 0.$rnd
     done

>       possibly this could do it?
>       while :; do
>               pid=$(head -n1 $file)
>               [ x$pid = x$$ ] && return 0 # won the race
>               if [ -z "$pid" ] || ! kill -0 $pid ; then
>                       echo $$ > $file
>               else
>                       # other still running
>                       sleep 1
>               fi
>       done

Looks like that would work, too.

Mike
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/

Reply via email to