resources.h

Include dependency graph for resources.h:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "10" [label="stdbool.h" tooltip="stdbool.h"] "5" [label="assert.h" tooltip="assert.h"] "12" [label="utils.h" tooltip="utils.h"] "15" [label="synclist.h" tooltip="synclist.h"] "9" [label="list.h" tooltip="list.h"] "8" [label="stdint.h" tooltip="stdint.h"] "2" [label="stdlib.h" tooltip="stdlib.h"] "11" [label="memory.h" tooltip="memory.h"] "1" [label="/__w/AtomVM/AtomVM/src/libAtomVM/resources.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/resources.h" fillcolor="#BFBFBF"] "13" [label="stddef.h" tooltip="stddef.h"] "3" [label="erl_nif.h" tooltip="erl_nif.h"] "6" [label="limits.h" tooltip="limits.h"] "4" [label="term_typedef.h" tooltip="term_typedef.h"] "16" [label="smp.h" tooltip="smp.h"] "14" [label="stdio.h" tooltip="stdio.h"] "7" [label="inttypes.h" tooltip="inttypes.h"] "12" -> "13" [dir=forward tooltip="include"] "12" -> "14" [dir=forward tooltip="include"] "12" -> "2" [dir=forward tooltip="include"] "15" -> "14" [dir=forward tooltip="include"] "15" -> "9" [dir=forward tooltip="include"] "15" -> "16" [dir=forward tooltip="include"] "9" -> "10" [dir=forward tooltip="include"] "11" -> "8" [dir=forward tooltip="include"] "11" -> "2" [dir=forward tooltip="include"] "11" -> "3" [dir=forward tooltip="include"] "11" -> "4" [dir=forward tooltip="include"] "11" -> "12" [dir=forward tooltip="include"] "1" -> "2" [dir=forward tooltip="include"] "1" -> "3" [dir=forward tooltip="include"] "1" -> "9" [dir=forward tooltip="include"] "1" -> "11" [dir=forward tooltip="include"] "1" -> "15" [dir=forward tooltip="include"] "3" -> "4" [dir=forward tooltip="include"] "4" -> "5" [dir=forward tooltip="include"] "4" -> "6" [dir=forward tooltip="include"] "4" -> "7" [dir=forward tooltip="include"] "4" -> "8" [dir=forward tooltip="include"] "16" -> "10" [dir=forward tooltip="include"] }

This graph shows which files directly or indirectly include resources.h:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "17" [label="/__w/AtomVM/AtomVM/src/libAtomVM/interop.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/interop.c"] "9" [label="/__w/AtomVM/AtomVM/src/libAtomVM/refc_binary.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/refc_binary.c"] "25" [label="/__w/AtomVM/AtomVM/src/libAtomVM/interop.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/interop.h"] "2" [label="/__w/AtomVM/AtomVM/src/libAtomVM/erl_nif_priv.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/erl_nif_priv.h"] "18" [label="/__w/AtomVM/AtomVM/src/libAtomVM/nifs.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/nifs.c"] "11" [label="/__w/AtomVM/AtomVM/src/libAtomVM/refc_binary.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/refc_binary.h"] "36" [label="/__w/AtomVM/AtomVM/src/libAtomVM/nifs.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/nifs.h"] "53" [label="/__w/AtomVM/AtomVM/src/libAtomVM/defaultatoms.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/defaultatoms.h"] "47" [label="/__w/AtomVM/AtomVM/src/libAtomVM/dictionary.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/dictionary.c"] "48" [label="/__w/AtomVM/AtomVM/src/libAtomVM/dictionary.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/dictionary.h"] "3" [label="/__w/AtomVM/AtomVM/src/libAtomVM/context.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/context.c"] "13" [label="/__w/AtomVM/AtomVM/src/libAtomVM/bif.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/bif.c"] "19" [label="/__w/AtomVM/AtomVM/src/libAtomVM/context.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/context.h"] "20" [label="/__w/AtomVM/AtomVM/src/libAtomVM/bif.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/bif.h"] "55" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets_hashtable.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets_hashtable.c"] "29" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_crypto.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_crypto.c"] "54" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets_hashtable.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets_hashtable.h"] "42" [label="/__w/AtomVM/AtomVM/src/libAtomVM/portnifloader.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/portnifloader.c"] "37" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_crypto.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_crypto.h"] "5" [label="/__w/AtomVM/AtomVM/src/libAtomVM/memory.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/memory.c"] "41" [label="/__w/AtomVM/AtomVM/src/libAtomVM/portnifloader.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/portnifloader.h"] "35" [label="/__w/AtomVM/AtomVM/src/libAtomVM/sys.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/sys.h"] "21" [label="/__w/AtomVM/AtomVM/src/libAtomVM/module.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/module.c"] "31" [label="/__w/AtomVM/AtomVM/src/libAtomVM/module.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/module.h"] "28" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_net.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_net.c"] "38" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_net.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_net.h"] "10" [label="/__w/AtomVM/AtomVM/src/libAtomVM/resources.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/resources.c"] "1" [label="/__w/AtomVM/AtomVM/src/libAtomVM/resources.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/resources.h" fillcolor="#BFBFBF"] "27" [label="/__w/AtomVM/AtomVM/src/libAtomVM/inet.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/inet.c"] "30" [label="/__w/AtomVM/AtomVM/src/libAtomVM/term.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/term.c"] "26" [label="/__w/AtomVM/AtomVM/src/libAtomVM/inet.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/inet.h"] "12" [label="/__w/AtomVM/AtomVM/src/libAtomVM/term.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/term.h"] "57" [label="/__w/AtomVM/AtomVM/src/libAtomVM/exportedfunction.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/exportedfunction.h"] "23" [label="/__w/AtomVM/AtomVM/src/libAtomVM/debug.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/debug.c"] "22" [label="/__w/AtomVM/AtomVM/src/libAtomVM/debug.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/debug.h"] "16" [label="/__w/AtomVM/AtomVM/src/libAtomVM/externalterm.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/externalterm.c"] "58" [label="/__w/AtomVM/AtomVM/src/libAtomVM/externalterm.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/externalterm.h"] "52" [label="/__w/AtomVM/AtomVM/src/libAtomVM/avmpack.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/avmpack.c"] "51" [label="/__w/AtomVM/AtomVM/src/libAtomVM/avmpack.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/avmpack.h"] "4" [label="/__w/AtomVM/AtomVM/src/libAtomVM/globalcontext.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/globalcontext.c"] "50" [label="/__w/AtomVM/AtomVM/src/libAtomVM/globalcontext.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/globalcontext.h"] "32" [label="/__w/AtomVM/AtomVM/src/libAtomVM/platform_nifs.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/platform_nifs.h"] "15" [label="/__w/AtomVM/AtomVM/src/libAtomVM/bitstring.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/bitstring.c"] "14" [label="/__w/AtomVM/AtomVM/src/libAtomVM/bitstring.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/bitstring.h"] "59" [label="/__w/AtomVM/AtomVM/src/libAtomVM/overflow_helpers.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/overflow_helpers.h"] "45" [label="/__w/AtomVM/AtomVM/src/libAtomVM/scheduler.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/scheduler.h"] "6" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_socket.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_socket.c"] "39" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_socket.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_socket.h"] "34" [label="/__w/AtomVM/AtomVM/src/libAtomVM/stacktrace.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/stacktrace.c"] "33" [label="/__w/AtomVM/AtomVM/src/libAtomVM/stacktrace.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/stacktrace.h"] "7" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_ssl.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_ssl.c"] "40" [label="/__w/AtomVM/AtomVM/src/libAtomVM/otp_ssl.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/otp_ssl.h"] "8" [label="/__w/AtomVM/AtomVM/src/libAtomVM/posix_nifs.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/posix_nifs.c"] "56" [label="/__w/AtomVM/AtomVM/src/libAtomVM/posix_nifs.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/posix_nifs.h"] "46" [label="/__w/AtomVM/AtomVM/src/libAtomVM/mailbox.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/mailbox.c"] "43" [label="/__w/AtomVM/AtomVM/src/libAtomVM/port.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/port.c"] "44" [label="/__w/AtomVM/AtomVM/src/libAtomVM/port.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/port.h"] "24" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets.c" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets.c"] "49" [label="/__w/AtomVM/AtomVM/src/libAtomVM/ets.h" tooltip="/__w/AtomVM/AtomVM/src/libAtomVM/ets.h"] "25" -> "13" [dir=back tooltip="include"] "25" -> "26" [dir=back tooltip="include"] "25" -> "17" [dir=back tooltip="include"] "25" -> "18" [dir=back tooltip="include"] "25" -> "29" [dir=back tooltip="include"] "25" -> "28" [dir=back tooltip="include"] "25" -> "6" [dir=back tooltip="include"] "25" -> "7" [dir=back tooltip="include"] "25" -> "8" [dir=back tooltip="include"] "25" -> "30" [dir=back tooltip="include"] "2" -> "3" [dir=back tooltip="include"] "2" -> "4" [dir=back tooltip="include"] "2" -> "5" [dir=back tooltip="include"] "2" -> "6" [dir=back tooltip="include"] "2" -> "7" [dir=back tooltip="include"] "2" -> "8" [dir=back tooltip="include"] "2" -> "9" [dir=back tooltip="include"] "2" -> "10" [dir=back tooltip="include"] "11" -> "4" [dir=back tooltip="include"] "11" -> "5" [dir=back tooltip="include"] "11" -> "6" [dir=back tooltip="include"] "11" -> "7" [dir=back tooltip="include"] "11" -> "9" [dir=back tooltip="include"] "11" -> "10" [dir=back tooltip="include"] "11" -> "12" [dir=back tooltip="include"] "36" -> "21" [dir=back tooltip="include"] "36" -> "18" [dir=back tooltip="include"] "36" -> "29" [dir=back tooltip="include"] "36" -> "37" [dir=back tooltip="include"] "36" -> "28" [dir=back tooltip="include"] "36" -> "38" [dir=back tooltip="include"] "36" -> "6" [dir=back tooltip="include"] "36" -> "39" [dir=back tooltip="include"] "36" -> "7" [dir=back tooltip="include"] "36" -> "40" [dir=back tooltip="include"] "36" -> "41" [dir=back tooltip="include"] "36" -> "8" [dir=back tooltip="include"] "53" -> "13" [dir=back tooltip="include"] "53" -> "3" [dir=back tooltip="include"] "53" -> "47" [dir=back tooltip="include"] "53" -> "24" [dir=back tooltip="include"] "53" -> "4" [dir=back tooltip="include"] "53" -> "17" [dir=back tooltip="include"] "53" -> "18" [dir=back tooltip="include"] "53" -> "29" [dir=back tooltip="include"] "53" -> "28" [dir=back tooltip="include"] "53" -> "6" [dir=back tooltip="include"] "53" -> "7" [dir=back tooltip="include"] "53" -> "43" [dir=back tooltip="include"] "53" -> "44" [dir=back tooltip="include"] "53" -> "8" [dir=back tooltip="include"] "53" -> "10" [dir=back tooltip="include"] "53" -> "34" [dir=back tooltip="include"] "48" -> "13" [dir=back tooltip="include"] "48" -> "3" [dir=back tooltip="include"] "48" -> "47" [dir=back tooltip="include"] "48" -> "5" [dir=back tooltip="include"] "48" -> "18" [dir=back tooltip="include"] "48" -> "6" [dir=back tooltip="include"] "48" -> "9" [dir=back tooltip="include"] "19" -> "20" [dir=back tooltip="include"] "19" -> "3" [dir=back tooltip="include"] "19" -> "22" [dir=back tooltip="include"] "19" -> "2" [dir=back tooltip="include"] "19" -> "24" [dir=back tooltip="include"] "19" -> "16" [dir=back tooltip="include"] "19" -> "4" [dir=back tooltip="include"] "19" -> "25" [dir=back tooltip="include"] "19" -> "5" [dir=back tooltip="include"] "19" -> "21" [dir=back tooltip="include"] "19" -> "31" [dir=back tooltip="include"] "19" -> "18" [dir=back tooltip="include"] "19" -> "36" [dir=back tooltip="include"] "19" -> "29" [dir=back tooltip="include"] "19" -> "28" [dir=back tooltip="include"] "19" -> "6" [dir=back tooltip="include"] "19" -> "7" [dir=back tooltip="include"] "19" -> "43" [dir=back tooltip="include"] "19" -> "44" [dir=back tooltip="include"] "19" -> "41" [dir=back tooltip="include"] "19" -> "9" [dir=back tooltip="include"] "19" -> "10" [dir=back tooltip="include"] "19" -> "45" [dir=back tooltip="include"] "19" -> "33" [dir=back tooltip="include"] "19" -> "30" [dir=back tooltip="include"] "20" -> "13" [dir=back tooltip="include"] "20" -> "21" [dir=back tooltip="include"] "20" -> "18" [dir=back tooltip="include"] "54" -> "24" [dir=back tooltip="include"] "54" -> "55" [dir=back tooltip="include"] "37" -> "29" [dir=back tooltip="include"] "41" -> "42" [dir=back tooltip="include"] "35" -> "3" [dir=back tooltip="include"] "35" -> "4" [dir=back tooltip="include"] "35" -> "21" [dir=back tooltip="include"] "35" -> "18" [dir=back tooltip="include"] "35" -> "6" [dir=back tooltip="include"] "35" -> "10" [dir=back tooltip="include"] "31" -> "20" [dir=back tooltip="include"] "31" -> "21" [dir=back tooltip="include"] "31" -> "18" [dir=back tooltip="include"] "31" -> "32" [dir=back tooltip="include"] "31" -> "33" [dir=back tooltip="include"] "31" -> "35" [dir=back tooltip="include"] "31" -> "30" [dir=back tooltip="include"] "38" -> "28" [dir=back tooltip="include"] "1" -> "2" [dir=back tooltip="include"] "1" -> "4" [dir=back tooltip="include"] "1" -> "11" [dir=back tooltip="include"] "1" -> "10" [dir=back tooltip="include"] "26" -> "27" [dir=back tooltip="include"] "26" -> "28" [dir=back tooltip="include"] "26" -> "6" [dir=back tooltip="include"] "26" -> "7" [dir=back tooltip="include"] "12" -> "13" [dir=back tooltip="include"] "12" -> "14" [dir=back tooltip="include"] "12" -> "3" [dir=back tooltip="include"] "12" -> "19" [dir=back tooltip="include"] "12" -> "47" [dir=back tooltip="include"] "12" -> "48" [dir=back tooltip="include"] "12" -> "24" [dir=back tooltip="include"] "12" -> "49" [dir=back tooltip="include"] "12" -> "55" [dir=back tooltip="include"] "12" -> "54" [dir=back tooltip="include"] "12" -> "57" [dir=back tooltip="include"] "12" -> "58" [dir=back tooltip="include"] "12" -> "50" [dir=back tooltip="include"] "12" -> "27" [dir=back tooltip="include"] "12" -> "17" [dir=back tooltip="include"] "12" -> "25" [dir=back tooltip="include"] "12" -> "5" [dir=back tooltip="include"] "12" -> "21" [dir=back tooltip="include"] "12" -> "31" [dir=back tooltip="include"] "12" -> "18" [dir=back tooltip="include"] "12" -> "29" [dir=back tooltip="include"] "12" -> "28" [dir=back tooltip="include"] "12" -> "6" [dir=back tooltip="include"] "12" -> "7" [dir=back tooltip="include"] "12" -> "59" [dir=back tooltip="include"] "12" -> "44" [dir=back tooltip="include"] "12" -> "56" [dir=back tooltip="include"] "12" -> "33" [dir=back tooltip="include"] "12" -> "30" [dir=back tooltip="include"] "57" -> "20" [dir=back tooltip="include"] "57" -> "31" [dir=back tooltip="include"] "57" -> "36" [dir=back tooltip="include"] "57" -> "32" [dir=back tooltip="include"] "57" -> "56" [dir=back tooltip="include"] "22" -> "23" [dir=back tooltip="include"] "22" -> "5" [dir=back tooltip="include"] "58" -> "16" [dir=back tooltip="include"] "58" -> "21" [dir=back tooltip="include"] "58" -> "18" [dir=back tooltip="include"] "51" -> "52" [dir=back tooltip="include"] "51" -> "4" [dir=back tooltip="include"] "51" -> "18" [dir=back tooltip="include"] "50" -> "51" [dir=back tooltip="include"] "50" -> "3" [dir=back tooltip="include"] "50" -> "19" [dir=back tooltip="include"] "50" -> "53" [dir=back tooltip="include"] "50" -> "54" [dir=back tooltip="include"] "50" -> "4" [dir=back tooltip="include"] "50" -> "5" [dir=back tooltip="include"] "50" -> "21" [dir=back tooltip="include"] "50" -> "31" [dir=back tooltip="include"] "50" -> "18" [dir=back tooltip="include"] "50" -> "29" [dir=back tooltip="include"] "50" -> "28" [dir=back tooltip="include"] "50" -> "38" [dir=back tooltip="include"] "50" -> "6" [dir=back tooltip="include"] "50" -> "39" [dir=back tooltip="include"] "50" -> "7" [dir=back tooltip="include"] "50" -> "40" [dir=back tooltip="include"] "50" -> "43" [dir=back tooltip="include"] "50" -> "44" [dir=back tooltip="include"] "50" -> "41" [dir=back tooltip="include"] "50" -> "8" [dir=back tooltip="include"] "50" -> "56" [dir=back tooltip="include"] "50" -> "10" [dir=back tooltip="include"] "50" -> "45" [dir=back tooltip="include"] "50" -> "34" [dir=back tooltip="include"] "50" -> "35" [dir=back tooltip="include"] "32" -> "18" [dir=back tooltip="include"] "14" -> "13" [dir=back tooltip="include"] "14" -> "15" [dir=back tooltip="include"] "14" -> "16" [dir=back tooltip="include"] "14" -> "17" [dir=back tooltip="include"] "14" -> "18" [dir=back tooltip="include"] "59" -> "13" [dir=back tooltip="include"] "59" -> "24" [dir=back tooltip="include"] "45" -> "4" [dir=back tooltip="include"] "45" -> "46" [dir=back tooltip="include"] "45" -> "18" [dir=back tooltip="include"] "45" -> "6" [dir=back tooltip="include"] "39" -> "6" [dir=back tooltip="include"] "39" -> "7" [dir=back tooltip="include"] "33" -> "34" [dir=back tooltip="include"] "40" -> "7" [dir=back tooltip="include"] "56" -> "4" [dir=back tooltip="include"] "56" -> "18" [dir=back tooltip="include"] "56" -> "28" [dir=back tooltip="include"] "56" -> "6" [dir=back tooltip="include"] "56" -> "8" [dir=back tooltip="include"] "44" -> "27" [dir=back tooltip="include"] "44" -> "18" [dir=back tooltip="include"] "44" -> "28" [dir=back tooltip="include"] "44" -> "6" [dir=back tooltip="include"] "44" -> "7" [dir=back tooltip="include"] "44" -> "43" [dir=back tooltip="include"] "49" -> "24" [dir=back tooltip="include"] "49" -> "50" [dir=back tooltip="include"] "49" -> "18" [dir=back tooltip="include"] }

Private data structures for nif object resources.

Defines

SELECT_EVENT_NOTIFICATION_SIZE (TUPLE_SIZE(4) + REF_SIZE + TERM_BOXED_RESOURCE_SIZE)

Functions

static inline void resource_type_destroy(struct ResourceType *resource_type)
bool select_event_notify(ErlNifEvent event, bool is_read, bool is_write, GlobalContext *global)

Send a notification that an event was selected.

This function is called from sys_poll_events platform function if a select event was selected and the read or write flag was set. It modifies the select_event object so the notification is only sent once.

The function can also be called from a select task loop if AVM_SELECT_IN_TASK is defined.

It is not an error to call this function with an event that is not in the list.

This function calls sys_unregister_select_event.

Parameters:
  • event – the event to notify

  • is_read – if the event was selected for reading

  • is_write – if the event was selected for writing

  • global – the global context

Returns:

true if the event was found

void select_event_count_and_destroy_closed(struct ListHead *select_events, size_t *read, size_t *write, size_t *either, GlobalContext *global)

Count events available for reading and/or writing and destroy the events marked for close.

Convenience function that can be called by sys_poll_events and iterates on events to be closed and count them.

The function can also be called from a select task loop if AVM_SELECT_IN_TASK is defined.

Parameters:
  • select_events – list of events, with a write lock

  • read – on output number of events with read = 1, can be NULL

  • write – on output number of events with write = 1, can be NULL

  • either – on output number of events with either read = 1 or write = 1, can be NULL

  • global – the global context

void destroy_resource_monitors(struct RefcBinary *resource, GlobalContext *global)

Destroy monitors associated with a resource.

Parameters:
  • resource – resource to destroy monitors for

  • global – the global context

term select_event_make_notification(void *rsrc_obj, uint64_t ref_ticks, bool is_write, Heap *heap)

Build a select event notification.

Parameters:
  • rsrc_obj – the resource to build the notification for

  • ref_ticks – the reference or 0 if it’s undefined

  • is_write – if the notification is for a write or a read

  • heap – the heap to create the notification in, should have enough memory available (see SELECT_EVENT_NOTIFICATION_SIZE)

void resource_type_fire_monitor(struct ResourceType *resource_type, ErlNifEnv *env, void *resource, int32_t process_id, uint64_t ref_ticks)

Call down handler for a given resource and remove monitor from list.

handler is called while holding lock on the list of monitors and if monitor is still in the list of resource monitors, thus ensuring that the resource still exists.

Parameters:
  • resource_type – type holding the list of monitors

  • env – environment for calling the down handler

  • resource – resource that monitored the process

  • process_id – id of the process monitored

  • ref_ticks – reference of the monitor

void resource_type_demonitor(struct ResourceType *resource_type, uint64_t ref_ticks)

Remove monitor from list of monitors.

Parameters:
  • resource_type – type holding the list of monitors

  • ref_ticks – reference of the monitor

struct ResourceType
#include <resources.h>

Collaboration diagram for ResourceType:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "20" [label="SpinLock" tooltip="SpinLock"] "1" [label="ResourceType" tooltip="ResourceType" fillcolor="#BFBFBF"] "15" [label="Module" tooltip="Module"] "3" [label="ListHead" tooltip="ListHead"] "11" [label="HeapFragment" tooltip="HeapFragment"] "13" [label="RefcBinaryQueueItem" tooltip="RefcBinaryQueueItem"] "4" [label="GlobalContext" tooltip="GlobalContext"] "5" [label="Ets" tooltip="Ets"] "12" [label="HNodeGroup" tooltip="HNodeGroup"] "19" [label="TimerList" tooltip="TimerList"] "17" [label="LiteralEntry" tooltip="LiteralEntry"] "7" [label="MailboxMessage" tooltip="MailboxMessage"] "10" [label="Heap" tooltip="Heap"] "6" [label="MessageQueueItem" tooltip="MessageQueueItem"] "18" [label="AtomsHashTable" tooltip="AtomsHashTable"] "14" [label="RefcBinary" tooltip="RefcBinary"] "8" [label="AtomTable" tooltip="AtomTable"] "16" [label="ExportedFunction" tooltip="ExportedFunction"] "2" [label="SyncList" tooltip="SyncList"] "9" [label="HNode" tooltip="HNode"] "1" -> "2" [dir=forward tooltip="usage"] "1" -> "4" [dir=forward tooltip="usage"] "1" -> "3" [dir=forward tooltip="usage"] "15" -> "16" [dir=forward tooltip="usage"] "15" -> "17" [dir=forward tooltip="usage"] "15" -> "3" [dir=forward tooltip="usage"] "3" -> "3" [dir=forward tooltip="usage"] "11" -> "11" [dir=forward tooltip="usage"] "13" -> "14" [dir=forward tooltip="usage"] "13" -> "13" [dir=forward tooltip="usage"] "4" -> "5" [dir=forward tooltip="usage"] "4" -> "6" [dir=forward tooltip="usage"] "4" -> "8" [dir=forward tooltip="usage"] "4" -> "13" [dir=forward tooltip="usage"] "4" -> "2" [dir=forward tooltip="usage"] "4" -> "15" [dir=forward tooltip="usage"] "4" -> "18" [dir=forward tooltip="usage"] "4" -> "19" [dir=forward tooltip="usage"] "4" -> "20" [dir=forward tooltip="usage"] "4" -> "3" [dir=forward tooltip="usage"] "5" -> "2" [dir=forward tooltip="usage"] "12" -> "9" [dir=forward tooltip="usage"] "12" -> "12" [dir=forward tooltip="usage"] "19" -> "3" [dir=forward tooltip="usage"] "7" -> "7" [dir=forward tooltip="usage"] "10" -> "11" [dir=forward tooltip="usage"] "6" -> "7" [dir=forward tooltip="usage"] "6" -> "6" [dir=forward tooltip="usage"] "18" -> "9" [dir=forward tooltip="usage"] "14" -> "1" [dir=forward tooltip="usage"] "14" -> "3" [dir=forward tooltip="usage"] "8" -> "9" [dir=forward tooltip="usage"] "8" -> "12" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="usage"] "9" -> "9" [dir=forward tooltip="usage"] "9" -> "10" [dir=forward tooltip="usage"] }

A resource type.

we need a reference to the global context as enif_release_resource needs to access the synchronized list of refc_binaries

Public Members

struct ListHead head
const char *name
GlobalContext *global
struct SyncList monitors
ErlNifResourceDtor *dtor
ErlNifResourceStop *stop
ErlNifResourceDown *down
struct ResourceMonitor
#include <resources.h>

Collaboration diagram for ResourceMonitor:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "21" [label="SpinLock" tooltip="SpinLock"] "3" [label="ResourceType" tooltip="ResourceType"] "16" [label="Module" tooltip="Module"] "5" [label="ListHead" tooltip="ListHead"] "13" [label="HeapFragment" tooltip="HeapFragment"] "15" [label="RefcBinaryQueueItem" tooltip="RefcBinaryQueueItem"] "6" [label="GlobalContext" tooltip="GlobalContext"] "7" [label="Ets" tooltip="Ets"] "14" [label="HNodeGroup" tooltip="HNodeGroup"] "20" [label="TimerList" tooltip="TimerList"] "18" [label="LiteralEntry" tooltip="LiteralEntry"] "9" [label="MailboxMessage" tooltip="MailboxMessage"] "12" [label="Heap" tooltip="Heap"] "8" [label="MessageQueueItem" tooltip="MessageQueueItem"] "19" [label="AtomsHashTable" tooltip="AtomsHashTable"] "2" [label="RefcBinary" tooltip="RefcBinary"] "10" [label="AtomTable" tooltip="AtomTable"] "1" [label="ResourceMonitor" tooltip="ResourceMonitor" fillcolor="#BFBFBF"] "17" [label="ExportedFunction" tooltip="ExportedFunction"] "4" [label="SyncList" tooltip="SyncList"] "11" [label="HNode" tooltip="HNode"] "3" -> "4" [dir=forward tooltip="usage"] "3" -> "6" [dir=forward tooltip="usage"] "3" -> "5" [dir=forward tooltip="usage"] "16" -> "17" [dir=forward tooltip="usage"] "16" -> "18" [dir=forward tooltip="usage"] "16" -> "5" [dir=forward tooltip="usage"] "5" -> "5" [dir=forward tooltip="usage"] "13" -> "13" [dir=forward tooltip="usage"] "15" -> "2" [dir=forward tooltip="usage"] "15" -> "15" [dir=forward tooltip="usage"] "6" -> "7" [dir=forward tooltip="usage"] "6" -> "8" [dir=forward tooltip="usage"] "6" -> "10" [dir=forward tooltip="usage"] "6" -> "15" [dir=forward tooltip="usage"] "6" -> "4" [dir=forward tooltip="usage"] "6" -> "16" [dir=forward tooltip="usage"] "6" -> "19" [dir=forward tooltip="usage"] "6" -> "20" [dir=forward tooltip="usage"] "6" -> "21" [dir=forward tooltip="usage"] "6" -> "5" [dir=forward tooltip="usage"] "7" -> "4" [dir=forward tooltip="usage"] "14" -> "11" [dir=forward tooltip="usage"] "14" -> "14" [dir=forward tooltip="usage"] "20" -> "5" [dir=forward tooltip="usage"] "9" -> "9" [dir=forward tooltip="usage"] "12" -> "13" [dir=forward tooltip="usage"] "8" -> "9" [dir=forward tooltip="usage"] "8" -> "8" [dir=forward tooltip="usage"] "19" -> "11" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="usage"] "2" -> "5" [dir=forward tooltip="usage"] "10" -> "11" [dir=forward tooltip="usage"] "10" -> "14" [dir=forward tooltip="usage"] "1" -> "2" [dir=forward tooltip="usage"] "1" -> "5" [dir=forward tooltip="usage"] "4" -> "5" [dir=forward tooltip="usage"] "11" -> "11" [dir=forward tooltip="usage"] "11" -> "12" [dir=forward tooltip="usage"] }

A resource monitor.

Public Members

struct ListHead resource_list_head
struct RefcBinary *resource
uint64_t ref_ticks
int32_t process_id
struct SelectEvent
#include <resources.h>

Collaboration diagram for SelectEvent:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "21" [label="SpinLock" tooltip="SpinLock"] "1" [label="SelectEvent" tooltip="SelectEvent" fillcolor="#BFBFBF"] "3" [label="ResourceType" tooltip="ResourceType"] "16" [label="Module" tooltip="Module"] "5" [label="ListHead" tooltip="ListHead"] "13" [label="HeapFragment" tooltip="HeapFragment"] "15" [label="RefcBinaryQueueItem" tooltip="RefcBinaryQueueItem"] "6" [label="GlobalContext" tooltip="GlobalContext"] "7" [label="Ets" tooltip="Ets"] "14" [label="HNodeGroup" tooltip="HNodeGroup"] "20" [label="TimerList" tooltip="TimerList"] "18" [label="LiteralEntry" tooltip="LiteralEntry"] "9" [label="MailboxMessage" tooltip="MailboxMessage"] "12" [label="Heap" tooltip="Heap"] "8" [label="MessageQueueItem" tooltip="MessageQueueItem"] "19" [label="AtomsHashTable" tooltip="AtomsHashTable"] "2" [label="RefcBinary" tooltip="RefcBinary"] "10" [label="AtomTable" tooltip="AtomTable"] "17" [label="ExportedFunction" tooltip="ExportedFunction"] "4" [label="SyncList" tooltip="SyncList"] "11" [label="HNode" tooltip="HNode"] "1" -> "2" [dir=forward tooltip="usage"] "1" -> "5" [dir=forward tooltip="usage"] "3" -> "4" [dir=forward tooltip="usage"] "3" -> "6" [dir=forward tooltip="usage"] "3" -> "5" [dir=forward tooltip="usage"] "16" -> "17" [dir=forward tooltip="usage"] "16" -> "18" [dir=forward tooltip="usage"] "16" -> "5" [dir=forward tooltip="usage"] "5" -> "5" [dir=forward tooltip="usage"] "13" -> "13" [dir=forward tooltip="usage"] "15" -> "2" [dir=forward tooltip="usage"] "15" -> "15" [dir=forward tooltip="usage"] "6" -> "7" [dir=forward tooltip="usage"] "6" -> "8" [dir=forward tooltip="usage"] "6" -> "10" [dir=forward tooltip="usage"] "6" -> "15" [dir=forward tooltip="usage"] "6" -> "4" [dir=forward tooltip="usage"] "6" -> "16" [dir=forward tooltip="usage"] "6" -> "19" [dir=forward tooltip="usage"] "6" -> "20" [dir=forward tooltip="usage"] "6" -> "21" [dir=forward tooltip="usage"] "6" -> "5" [dir=forward tooltip="usage"] "7" -> "4" [dir=forward tooltip="usage"] "14" -> "11" [dir=forward tooltip="usage"] "14" -> "14" [dir=forward tooltip="usage"] "20" -> "5" [dir=forward tooltip="usage"] "9" -> "9" [dir=forward tooltip="usage"] "12" -> "13" [dir=forward tooltip="usage"] "8" -> "9" [dir=forward tooltip="usage"] "8" -> "8" [dir=forward tooltip="usage"] "19" -> "11" [dir=forward tooltip="usage"] "2" -> "3" [dir=forward tooltip="usage"] "2" -> "5" [dir=forward tooltip="usage"] "10" -> "11" [dir=forward tooltip="usage"] "10" -> "14" [dir=forward tooltip="usage"] "4" -> "5" [dir=forward tooltip="usage"] "11" -> "11" [dir=forward tooltip="usage"] "11" -> "12" [dir=forward tooltip="usage"] }

A selectable event.

Public Members

struct ListHead head
ErlNifEvent event
struct RefcBinary *resource
bool read
bool write
bool close
int32_t local_pid
uint64_t ref_ticks