summaryrefslogtreecommitdiff
path: root/libusb/os/threads_windows.h
Commit message (Collapse)AuthorAgeFilesLines
* core: Fix unused variable warnings on release buildsChris Dickens2020-09-281-5/+1
| | | | | | | | | | | The recently introduced PTHREAD_CHECK and WINAPI_CHECK macros cause a large number of compiler warnings for unused variables on release builds. Fix this by implementing those macros in terms of some new macros that are defined based on the definition of NDEBUG. Closes #788 Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* core: Simplify thread abstractions and add debug checksChris Dickens2020-09-131-15/+13
| | | | | | | | | | | | | | | | | | | The POSIX thread mutex initialization function can potentially fail, but in practice this is unlikely to occur. There is also inconsistent use of the result of the mutex initialization within the library. The result is only checked for mutexes in the libusb_device and libusb_device_handle structures but is ignored in all other cases. Simplify the mutex initialization function by changing the abstraction's wrapper to a void function, much like all the other functions that already exist. To that end, introduce macros for the abstractions that will check the return value on debug builds. Also remove the dependence on the core library needing errno.h to translate errors from usbi_cond_timedwait(). The abstraction will convert the implementation-specific error codes to LIBUSB_ERROR values. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* core: Convert internal macros to static inline functionsChris Dickens2020-01-251-0/+2
| | | | | | | | | | | | Older versions of the Visual Studio compiler are picky about macros constructed with the 'do { ... } while (0)' construct. Convert these internal ones to static inline functions. The result is functionally equivalent but gets us type checking and a bit more readability. Also address some compiler warnings due to some header files that are being included in a different order than before. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Misc: Trim and consolidate header file usageChris Dickens2020-01-241-1/+1
| | | | | | | | | | | | | Refactor libusbi.h to include the set of common header files needed by every main source file in the library and change these source files to include libusbi.h first, followed by any non-common headers. Including libusbi.h first ensures that the config definitions are pulled in and will eliminate redundant includes in the individual sources files. Also clean up some whitespace errors and remove unnecessary definitions in the manually generated config.h files. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Windows: Drop support for Windows XPChris Dickens2020-01-211-12/+18
| | | | | | | | | XP is nearly 20 years old and there are hoops we jump through to keep supporting it. Time to say goodbye and simplify some things. Closes #267 Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Windows: Remove support for WinCE and Visual Studio older than 2013Chris Dickens2020-01-201-5/+5
| | | | | | | | | | | There appears to be no need for the WinCE backend anymore, and it is increasingly difficult to keep healthy as the rest of the library changes. Require at least Visual Studio 2013 to compile. This simplifies matters as there is some semblance of C99 support there. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Windows: Rework poll() emulation to a much simpler and effective designChris Dickens2018-01-061-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous poll() implementation worked okay but had some issues. It was inefficient, had a large footprint, and there were simply some use cases that didn't work (e.g. a synchronous transfer that completes when no other event or transfer is pending would not be processed until the next poll() timeout). This commit introduces a new, simpler design that simply associates an OVERLAPPED structure to an integer that acts as a file descriptor. The poll() emulation now solely cares about the OVERLAPPED structure, not transfers or HANDLEs or cancelation functions. These details have been moved up into the higher OS-specific layers. For Windows NT environments, several deficiencies have been addressed: 1) It was previously possible to successfully submit a transfer but fail to add the "file descriptor" to the pollfd set. This was silently ignored and would result in the user never seeing the transfer being completed. 2) Synchronously completed transfers would previously not be processed unless another event (such as a timeout or other transfer completion) was processed. 3) Canceling any one transfer on an endpoint would previously result in *all* transfers on that endpoint being canceled, due to the use of the AbortPipe() function. This commit addresses all of these issues. In particular, run-time detection of the CancelIoEx() function will allow the user to cancel a single outstanding transfer without affecting any others still in process. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Windows: Further improve thread abstractionChris Dickens2018-01-041-29/+60
| | | | | | | | | Adopt typedefs and inline functions to get the benefits of type checking. Convert all trivial functions to inline and remove return values where they aren't checked. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Windows: Improve locking in threading abstractionChris Dickens2018-01-031-1/+1
| | | | | | | | | | | | | | | | | Convert the usbi_mutex_t type to a CRITICAL_SECTION object. There are numerous advantages including lower resource usage and a better fast-path (doesn't require entering kernel space). Simplify the condition variable implementation by not associating a wait structure with a particular thread ID. This is not needed and causes an unnecessary search through the linked list of any available wait structures when the real optimization is just reusing an already created event object. Also, while here remove all the checks for NULL pointers because we don't do such a silly thing inside the library. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* core: Change event handling lock to traditional (non-recursive) typeChris Dickens2016-08-171-3/+0
| | | | | | | | | | | | | | | | | | | The event handling lock was previously required to be of the recursive type because the libusb_close() path requires the lock and may be called by a thread that is handling events (e.g. from within a transfer or hotplug callback). With commit 960a6e75, it is possible to determine whether the current function is being called from an event handling context, thus the recursive lock type is no longer necessary. References: * http://libusb.org/ticket/82 * 74282582cc879f091ad1d847411337bc3fa78a2b * c775c2f43037cd235b65410583179195e25f9c4a Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> [hdegoede@redhat.com: rebase on top of current master] Signed-off-by: Hans de Goede <hdegoede@redhat.com>
* core: Remove POSIX threads influence from synchronization codeChris Dickens2016-02-241-8/+6
| | | | | | | | | | | | | | This commit changes the signatures of the synchronization functions to reflect the needs of the library rather than the signature of the pthreads API. The mutex and condition variable attributes parameters have been removed as no part of the core library makes use of them. In addition, the condition variable timed-wait function has been modified to accept the relative time passed in via libusb_wait_for_event(). This allows the implementation-specific code to handle conversion to absolute time as necessary, rather than forcing this to occur. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Misc: Remove unused definitions for usbi_cond_signal()Chris Dickens2016-02-241-1/+0
| | | | Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Windows: Fix style issues in threading codeChris Dickens2016-01-301-32/+21
| | | | | | Also moves private structure definition outside of header file. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* core: Prevent attempts to recursively hande eventsChris Dickens2015-09-281-0/+6
| | | | | | | | | | | | | | | | | | | Prior to this commit, it was possible to call certain functions from within a hotplug or transfer completion callback that would in turn attempt to handle events (e.g. any of the sync transfer APIs). This is dangerous because certain events may cause the nested calls to free memory that is currently in use by the previous calls. This implementation uses thread-local storage to store a key within the context that is set to a non-NULL value whenever event handling is occurring. This allows us to detect when dangerous calls are made from within event handling context. Such calls will return an error code of LIBUSB_ERROR_BUSY. Note that this implementation was chosen because of its portability. It is supported on all platforms that libusb supports. Signed-off-by: Chris Dickens <christopher.a.dickens@gmail.com>
* Misc: Revert all references to libusb/libusb.infohjelmn@cs.unm.edu2014-01-081-1/+1
|
* Misc: Ensure all sources are UTF-8Pete Batard2012-05-231-1/+1
| | | | * Also remove extra lines at the end of samples
* Core: Add a timestamping and thread ID to loggingPeter Stuge2012-05-061-0/+2
|
* Misc: Rebrand to libusbxPete Batard2012-04-031-3/+2
| | | | | * Mentions of 'libusb' in doxygen are changed to 'libusbx' * Also update copyright notices and remove unneeded EOF LFs
* Fix #64 use of reserved identifiers throughout libusbNathan Hjelm2011-09-221-3/+3
|
* Add recursive mutexes to threading abstractionVitali Lovich2011-07-241-0/+2
| | | | | | | | | | | This is necessary for the device close path which needs to attain the events lock, but which might itself be called while handling an event. The events lock is necessary to properly clean up transfers which might still be pointing to the device. References #82. [stuge: Move usbi_mutex_init_recursive() into threads_posix.c] [stuge: Must also #define _XOPEN_SOURCE 500 to be able to build] [pbatard: Un-inline usbi_mutex_init_recursive() to make Cygwin happy]
* Add Windows supportPete Batard2010-07-271-0/+84
Via Cygwin/MinGW, libusb now has windows support. Thanks to contributors: Michael Plante, Orin Eman, Peter Stuge, Stephan Meyer, Xiaofan Chen.