Commit Graph

15 Commits

Author SHA1 Message Date
Hardening
6febe88026 Fixes for queue and stack
This patch does misc fixes in queue and stack:
* the *_new() were not handling OOM correctly ;
* the *_Contains() methods were not using the equals cb;
* the lock were not always taken when accessing internal members;
2014-04-18 16:27:51 +02:00
Hardening
36b4f20ff8 Fixes in case of OOM 2014-04-09 15:26:43 +02:00
Norbert Federa
3a58934eb2 libwinpr-utils: Use criticalsection with spincount
Use InitializeCriticalSectionAndSpinCount instead of IntializeCriticalSection.
Using spin counts for critical sections of short duration enables the calling
thread to avoid the wait operation in most situations which can dramatically
improve the overall performance on multiprocessor systems.

On Linux this change has no effect because the new winpr critical section
implementation does not use the SpinCount field under Linux because the NPTL
synchronization primitives are implemented using the extremely performant
futex system calls which have this magic already built in.

However, on Mac OS X this change improved the overall performance of the
multithreaded RemoteFX decoder by 25 percent.

I've used a SpinCount of 4000 which avoided 99 percent of the wait calls.
This value is also used by Microsoft's heap manager for its per-heap
critical sections.

Note: This change requires pull request #1397 to be merged.
2013-08-07 18:16:01 +02:00
Norbert Federa
81ef251fc8 winpr: improve and fix locking for data structures
- Improved/completed(almost) winpr's critical section implementation
- Replaced WaitForSingleObject locking with critical sections

Note:
WaitForSingleObject should _never_ be used for granular low-contention
locks as it _always_ enters the kernel.

Just replacing WaitForSingleObject locking in Bufferpool with
EnterCriticalSection boosts the multithreaded rfx decoder
performance by almost 400% on win32.
2013-08-02 12:07:05 +02:00
Marc-André Moreau
8b9ea43d78 libfreerdp-core: fix locking with TS Gateway 2013-03-27 20:06:10 -04:00
Marc-André Moreau
4269ac5c14 xfreerdp: improve asynchronicity 2013-02-09 17:13:53 -05:00
Marc-André Moreau
9a7bcbb084 libfreerdp-codec: remove old RemoteFX tile pool 2013-01-20 20:44:30 -05:00
Vic Lee
48c0c4b090 libwinpr-utils/queue: fix a memory corruption in Queue_Clear. 2012-12-24 12:45:55 +08:00
Marc-André Moreau
7ff2be09b2 libfreerdp-core: more TSG memory cleanup 2012-12-12 22:03:40 -05:00
Marc-André Moreau
3aeb9eb197 libfreerdp-core: TSG partial cleanup 2012-12-11 23:34:51 -05:00
Marc-André Moreau
db91555564 libfreerdp-core: improved TSG asynchronicity 2012-12-10 18:56:53 -05:00
Marc-André Moreau
5a131688e4 libwinpr-utils: implement ArrayList 2012-12-05 17:24:01 -05:00
Marc-André Moreau
875c556d13 libfreerdp-core: change interlocked singly-linked list to synchronized Queue 2012-12-05 16:04:01 -05:00
Marc-André Moreau
9416e7355e libwinpr-utils: implement queue 2012-11-30 17:23:36 -05:00
Marc-André Moreau
c06c0fe665 libwinpr-utils: stubbed Queue, Stack and ArrayList 2012-11-30 16:13:19 -05:00