[Lazarus] semaphore [solved]

Antonio Fortuny a.fortuny at sitasoftware.lu
Fri Feb 17 08:44:02 CET 2012



Le 16/02/2012 17:13, Sven Barth a écrit :
> Am 16.02.2012 17:04, schrieb Antonio Fortuny:
>> Hi all.
>>
>> On an OpenSuse 12.1, Lazarus 0.9.31, FPC 2.4.4 I can't create a 
>> semaphore
>> Code:
>>
>> LockerS: Integer;
>> SemKey: Integer;
>>
>>
>> SemKey := strToIntDef(ESemaphoreKey.Text, -1);
>> if SemKey = -1 then
>> Break;
>> LockerS := semget(SemKey, 1, 0666 + IPC_CREAT + IPC_EXCL);
>> if LockerS >= 0 then begin
>> // got the semaphore: initialize it
>> Args.Val := 1;
>> Ret := semctl(LockerS, 0, SEM_SETVAL, Args);
>> if Ret >= 0 then begin
>> // semaphore locked; get out
>> Operation.sem_op := -1; //reduce the semaphore count to lock
>> Operation.sem_num := 0; //signifies 0th semaphore
>> Operation.sem_flg := IPC_EXCL; // fail if key exists
>> Ret := semop(LockerS, @Operation,1);
>> if Ret >= 0 then
>> Break;
>> end
>> end else begin
>> LastError := errno;
>> LastErrorText := strerror(LastError);
>> Memo1.Lines.Add(Format('semaphore locker not created errno:%d-%s',
>> [LastError, LastErrorText]));
>> end
>>
>> *semget *always returns -1 with errno set to 2 (?) whatever the contents
>> of *SemKey* could be.
>>
>> What is wrong ?
>
> According to 
> http://pubs.opengroup.org/onlinepubs/7908799/xsh/semget.html error 2 
> means the following:
>
> [ENOENT]
>     A semaphore identifier does not exist for the argument key and 
> (semflg&IPC_CREAT) is equal to 0.
Obviously I was too tired to read all the words :'(
>
> Can you try to use "or" instead of "+"? Also you're trying to pass a C 
> style octal number. Replace the leading zero by a "&" which is the 
> equivalent declaration for Free Pascal (see also here: 
> http://www.freepascal.org/docs-html/ref/refse6.html ).
You are absolutely right and it works: really very nice 8-)
Thanks to you two, Sven and Lukasz
>
> Regards,
> Sven
>
> -- 
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>






More information about the Lazarus mailing list