diff options
author | Patrik Nyblom <[email protected]> | 2013-08-23 17:22:38 +0200 |
---|---|---|
committer | Patrik Nyblom <[email protected]> | 2013-08-23 17:22:38 +0200 |
commit | 42beca2776cf0995a08d9218708a6d66925adc34 (patch) | |
tree | e8582a17cf7beff421b0e07b0d82da3ee0c2c297 /erts/emulator/beam | |
parent | cefaaa6eddafbd3fd418eec5551819a82935e3b3 (diff) | |
parent | 076dff38d5aa6fd303b5c2a3aa809115c0545164 (diff) | |
download | otp-42beca2776cf0995a08d9218708a6d66925adc34.tar.gz otp-42beca2776cf0995a08d9218708a6d66925adc34.tar.bz2 otp-42beca2776cf0995a08d9218708a6d66925adc34.zip |
Merge branch 'maint'
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/erl_async.c | 14 | ||||
-rw-r--r-- | erts/emulator/beam/erl_driver.h | 4 |
2 files changed, 17 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_async.c b/erts/emulator/beam/erl_async.c index 054d1a48f6..e6d72f569b 100644 --- a/erts/emulator/beam/erl_async.c +++ b/erts/emulator/beam/erl_async.c @@ -583,6 +583,20 @@ int erts_async_ready_clean(void *varq, void *val) #endif /* +** Generate a fair async key prom an ErlDrvPort +** The port data gives a fair distribution grom port pointer +** to unsigned integer - to be used in key for driver_async below. +*/ +unsigned int driver_async_port_key(ErlDrvPort port) +{ + ErlDrvTermData td = driver_mk_port(port); + if (td == (ErlDrvTermData) NIL) { + return 0; + } + return (unsigned int) (UWord) internal_port_data(td); +} + +/* ** Schedule async_invoke on a worker thread ** NOTE will be syncrounous when threads are unsupported ** return values: diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h index f43f5a766e..d2a11cce05 100644 --- a/erts/emulator/beam/erl_driver.h +++ b/erts/emulator/beam/erl_driver.h @@ -133,7 +133,7 @@ typedef struct { #define ERL_DRV_EXTENDED_MARKER (0xfeeeeeed) #define ERL_DRV_EXTENDED_MAJOR_VERSION 2 -#define ERL_DRV_EXTENDED_MINOR_VERSION 1 +#define ERL_DRV_EXTENDED_MINOR_VERSION 2 /* * The emulator will refuse to load a driver with different major @@ -644,6 +644,8 @@ EXTERN int erl_drv_send_term(ErlDrvTermData port, int len); /* Async IO functions */ +EXTERN unsigned int driver_async_port_key(ErlDrvPort port); + EXTERN long driver_async(ErlDrvPort ix, unsigned int* key, void (*async_invoke)(void*), |