Browse Source

+ Added missing criticalsection handlers

git-svn-id: trunk@946 -
michael 20 years ago
parent
commit
539436ed57
4 changed files with 31 additions and 1 deletions
  1. 1 0
      .gitattributes
  2. 1 0
      packages/base/libc/libc.pp
  3. 23 0
      packages/base/libc/pthread.inc
  4. 6 1
      packages/base/libc/pthreadh.inc

+ 1 - 0
.gitattributes

@@ -1299,6 +1299,7 @@ packages/base/libc/printfh.inc svneol=native#text/plain
 packages/base/libc/proutedh.inc svneol=native#text/plain
 packages/base/libc/prwhodh.inc svneol=native#text/plain
 packages/base/libc/ptalkdh.inc svneol=native#text/plain
+packages/base/libc/pthread.inc svneol=native#text/plain
 packages/base/libc/pthreadh.inc svneol=native#text/plain
 packages/base/libc/pthreadtypesh.inc svneol=native#text/plain
 packages/base/libc/ptimedh.inc svneol=native#text/plain

+ 1 - 0
packages/base/libc/libc.pp

@@ -249,5 +249,6 @@ uses kernelioctl;
 {$i nif_ether.inc}    // netinet/if_ether.h macros.
 {$i nicmp6.inc}       // netinet/icmp6.h macros.
 {$i nip_icmp.inc}     // netinet/ip_icmp.h macros.
+{$i pthread.inc}      // pthread.h Kylix compatibility.
 
 end.

+ 23 - 0
packages/base/libc/pthread.inc

@@ -0,0 +1,23 @@
+Function InitializeCriticalSection(var lpCriticalSection: TRTLCriticalSection): Integer;
+
+var
+  Attr : pthread_mutexattr_t;
+
+begin
+  Result:=pthread_mutexattr_init(Attr);
+  if Result=0 then 
+    Try
+      Result:=pthread_mutexattr_settype(Attr,PTHREAD_MUTEX_RECURSIVE);
+      if Result=0 then 
+        Result:=pthread_mutex_init(lpCriticalSection, Attr);
+    Finally
+      pthread_mutexattr_destroy(Attr);
+    end;
+end;
+
+function TryEnterCriticalSection(var lpCriticalSection: TRTLCriticalSection): Boolean;
+begin
+  Result:=EBUSY<>pthread_mutex_trylock(lpCriticalSection);
+end;
+
+                              

+ 6 - 1
packages/base/libc/pthreadh.inc

@@ -255,7 +255,12 @@ function pthread_sigmask(__how:longint; var __newmask:__sigset_t; var __oldmask:
 { Borland compatibility }
 
 function GetCurrentThreadID: TTHreadID ; cdecl; external threadslib name 'pthread_self';
-
+function InitializeCriticalSection(var lpCriticalSection: TRTLCriticalSection): Integer; 
+function EnterCriticalSection(var lpCriticalSection: TRTLCriticalSection): Integer; cdecl; external threadslib name 'pthread_mutex_lock';
+function LeaveCriticalSection(var lpCriticalSection: TRTLCriticalSection): Integer; cdecl; external threadslib name 'pthread_mutex_unlock';
+function TryEnterCriticalSection(var lpCriticalSection: TRTLCriticalSection): Boolean; 
+function DeleteCriticalSection(var lpCriticalSection: TRTLCriticalSection): Integer; cdecl; external threadslib name 'pthread_mutex_destroy';
+          
 Type
   TPThreadFunc = function(Parameter: Pointer): Integer; cdecl;
   PPthreadCleanupBuffer = ^_pthread_cleanup_buffer;