Skip to content

Mark dispatch_source APIs that are not available on Linux as unavailable #96

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion dispatch/dispatch.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,24 @@
#include <unistd.h>
#include <fcntl.h>

#if defined(__linux__) && defined(__DISPATCH_BUILDING_SWIFT_MODULE__)
#ifdef __has_attribute
#if __has_attribute(unavailable)
#define __DISPATCH_UNAVAILABLE(msg) __attribute__((__unavailable__(msg)))
#endif
#endif
#ifndef __DISPATCH_UNAVAILABLE
#define __DISPATCH_UNAVAILABLE(msg)
#endif

#ifdef __linux__
#ifdef __DISPATCH_BUILDING_SWIFT_MODULE__
#include <stdio.h> // for off_t
#endif
#define DISPATCH_LINUX_UNAVAILABLE() \
__DISPATCH_UNAVAILABLE("This interface is unavailable on linux systems")
#else
#define DISPATCH_LINUX_UNAVAILABLE()
#endif

#ifndef __OSX_AVAILABLE_STARTING
#define __OSX_AVAILABLE_STARTING(x, y)
Expand Down
10 changes: 5 additions & 5 deletions dispatch/source.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ DISPATCH_SOURCE_TYPE_DECL(data_or);
* The mask is a mask of desired events from dispatch_source_mach_send_flags_t.
*/
#define DISPATCH_SOURCE_TYPE_MACH_SEND (&_dispatch_source_type_mach_send)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_SOURCE_TYPE_DECL(mach_send);

/*!
Expand All @@ -111,7 +111,7 @@ DISPATCH_SOURCE_TYPE_DECL(mach_send);
* The mask is unused (pass zero for now).
*/
#define DISPATCH_SOURCE_TYPE_MACH_RECV (&_dispatch_source_type_mach_recv)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_SOURCE_TYPE_DECL(mach_recv);

/*!
Expand All @@ -124,7 +124,7 @@ DISPATCH_SOURCE_TYPE_DECL(mach_recv);
*/
#define DISPATCH_SOURCE_TYPE_MEMORYPRESSURE \
(&_dispatch_source_type_memorypressure)
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_8_0)
__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_8_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_SOURCE_TYPE_DECL(memorypressure);

/*!
Expand All @@ -135,7 +135,7 @@ DISPATCH_SOURCE_TYPE_DECL(memorypressure);
* The mask is a mask of desired events from dispatch_source_proc_flags_t.
*/
#define DISPATCH_SOURCE_TYPE_PROC (&_dispatch_source_type_proc)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_SOURCE_TYPE_DECL(proc);

/*!
Expand Down Expand Up @@ -178,7 +178,7 @@ DISPATCH_SOURCE_TYPE_DECL(timer);
* The mask is a mask of desired events from dispatch_source_vnode_flags_t.
*/
#define DISPATCH_SOURCE_TYPE_VNODE (&_dispatch_source_type_vnode)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_SOURCE_TYPE_DECL(vnode);

/*!
Expand Down
2 changes: 1 addition & 1 deletion os/voucher_activity_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
#define __OS_VOUCHER_ACTIVITY_PRIVATE__

#if OS_VOUCHER_ACTIVITY_SPI
#ifdef __APPLE__
#if __has_include(<mach/mach_time.h>)
#include <mach/mach_time.h>
#include <firehose/tracepoint_private.h>
#endif
Expand Down
6 changes: 3 additions & 3 deletions os/voucher_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#ifndef __linux__
#include <os/base.h>
#endif
#ifdef __APPLE__
#if __has_include(<mach/mach.h>)
#include <os/object.h>
#include <mach/mach.h>
#endif
Expand Down Expand Up @@ -416,7 +416,7 @@ dispatch_queue_create_with_accounting_override_voucher(
dispatch_queue_attr_t _Nullable attr,
voucher_t _Nullable voucher);

#ifdef __APPLE__
#if __has_include(<mach/mach.h>)
/*!
* @group Voucher Mach SPI
* SPI intended for clients that need to interact with mach messages or mach
Expand Down Expand Up @@ -528,7 +528,7 @@ int
voucher_get_current_persona_proximate_info(
struct proc_persona_info *persona_info);

#endif // __APPLE__
#endif // __has_include(<mach/mach.h>)

__END_DECLS

Expand Down
2 changes: 1 addition & 1 deletion private/data_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ DISPATCH_DATA_DESTRUCTOR_TYPE_DECL(none);
*/
#define DISPATCH_DATA_DESTRUCTOR_VM_DEALLOCATE \
(_dispatch_data_destructor_vm_deallocate)
__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0)
__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_DATA_DESTRUCTOR_TYPE_DECL(vm_deallocate);

/*!
Expand Down
12 changes: 7 additions & 5 deletions private/source_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ DISPATCH_SOURCE_TYPE_DECL(interval);
* The handle is a process identifier (pid_t).
*/
#define DISPATCH_SOURCE_TYPE_VFS (&_dispatch_source_type_vfs)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_EXPORT const struct dispatch_source_type_s _dispatch_source_type_vfs;

/*!
Expand All @@ -91,6 +91,7 @@ DISPATCH_EXPORT const struct dispatch_source_type_s _dispatch_source_type_vfs;
#define DISPATCH_SOURCE_TYPE_VM (&_dispatch_source_type_vm)
__OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_7, __MAC_10_10, __IPHONE_4_3,
__IPHONE_8_0, "Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead")
DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_EXPORT const struct dispatch_source_type_s _dispatch_source_type_vm;

/*!
Expand All @@ -104,6 +105,7 @@ __OSX_DEPRECATED(10.9, 10.12, "Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead")
__IOS_DEPRECATED(6.0, 10.0, "Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead")
__TVOS_DEPRECATED(6.0, 10.0, "Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead")
__WATCHOS_DEPRECATED(1.0, 3.0, "Use DISPATCH_SOURCE_TYPE_MEMORYPRESSURE instead")
DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_EXPORT const struct dispatch_source_type_s
_dispatch_source_type_memorystatus;

Expand All @@ -112,7 +114,7 @@ DISPATCH_EXPORT const struct dispatch_source_type_s
* @discussion A dispatch source that monitors events on socket state changes.
*/
#define DISPATCH_SOURCE_TYPE_SOCK (&_dispatch_source_type_sock)
__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0)
__OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_EXPORT const struct dispatch_source_type_s _dispatch_source_type_sock;

__END_DECLS
Expand Down Expand Up @@ -456,7 +458,7 @@ uint64_t
dispatch_timer_aggregate_get_delay(dispatch_timer_aggregate_t aggregate,
uint64_t *_Nullable leeway_ptr);

#if TARGET_OS_MAC
#if __has_include(<mach/mach.h>)
/*!
* @typedef dispatch_mig_callback_t
*
Expand All @@ -466,7 +468,7 @@ dispatch_timer_aggregate_get_delay(dispatch_timer_aggregate_t aggregate,
typedef boolean_t (*dispatch_mig_callback_t)(mach_msg_header_t *message,
mach_msg_header_t *reply);

__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
mach_msg_return_t
dispatch_mig_server(dispatch_source_t ds, size_t maxmsgsz,
Expand All @@ -478,7 +480,7 @@ dispatch_mig_server(dispatch_source_t ds, size_t maxmsgsz,
* @abstract
* Extract the context pointer from a mach message trailer.
*/
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0)
__OSX_AVAILABLE_STARTING(__MAC_10_6,__IPHONE_4_0) DISPATCH_LINUX_UNAVAILABLE()
DISPATCH_EXPORT DISPATCH_PURE DISPATCH_WARN_RESULT DISPATCH_NONNULL_ALL
DISPATCH_NOTHROW
void *_Nullable
Expand Down
4 changes: 4 additions & 0 deletions src/data.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,11 @@ const dispatch_block_t _dispatch_data_destructor_none = ^{
DISPATCH_INTERNAL_CRASH(0, "none destructor called");
};

#ifndef __linux__
const dispatch_block_t _dispatch_data_destructor_vm_deallocate = ^{
DISPATCH_INTERNAL_CRASH(0, "vmdeallocate destructor called");
};
#endif

const dispatch_block_t _dispatch_data_destructor_inline = ^{
DISPATCH_INTERNAL_CRASH(0, "inline destructor called");
Expand Down Expand Up @@ -247,7 +249,9 @@ dispatch_data_create_f(const void *buffer, size_t size, dispatch_queue_t queue,
if (destructor != DISPATCH_DATA_DESTRUCTOR_DEFAULT &&
destructor != DISPATCH_DATA_DESTRUCTOR_FREE &&
destructor != DISPATCH_DATA_DESTRUCTOR_NONE &&
#ifndef __linux__
destructor != DISPATCH_DATA_DESTRUCTOR_VM_DEALLOCATE &&
#endif
destructor != DISPATCH_DATA_DESTRUCTOR_INLINE) {
destructor = ^{ destructor_function((void*)buffer); };
}
Expand Down
16 changes: 9 additions & 7 deletions src/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1313,6 +1313,14 @@ const struct dispatch_source_type_s _dispatch_source_type_vm = {

#endif // DISPATCH_USE_VM_PRESSURE

const struct dispatch_source_type_s _dispatch_source_type_signal = {
.ke = {
.filter = EVFILT_SIGNAL,
.flags = EV_UDATA_SPECIFIC,
},
};

#if !defined(__linux__)
static void
dispatch_source_type_proc_init(dispatch_source_t ds,
dispatch_source_type_t type DISPATCH_UNUSED,
Expand All @@ -1339,13 +1347,6 @@ const struct dispatch_source_type_s _dispatch_source_type_proc = {
.init = dispatch_source_type_proc_init,
};

const struct dispatch_source_type_s _dispatch_source_type_signal = {
.ke = {
.filter = EVFILT_SIGNAL,
.flags = EV_UDATA_SPECIFIC,
},
};

const struct dispatch_source_type_s _dispatch_source_type_vnode = {
.ke = {
.filter = EVFILT_VNODE,
Expand Down Expand Up @@ -1402,6 +1403,7 @@ const struct dispatch_source_type_s _dispatch_source_type_sock = {
,
#endif // EVFILT_SOCK
};
#endif // !defined(__linux__)

static void
dispatch_source_type_data_init(dispatch_source_t ds,
Expand Down