aboutsummaryrefslogtreecommitdiffstats
path: root/lib/erl_interface/src/connect/ei_resolve.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2019-02-05 20:34:59 +0100
committerRickard Green <[email protected]>2019-02-05 20:34:59 +0100
commit320a02e522085fe5eec141d7bf18631e4ef74f0a (patch)
tree6f9ca128ea1a81d3c1be6e18bc7b59aa370d2e8e /lib/erl_interface/src/connect/ei_resolve.c
parenta4641c5b3469d2e3cb9b0937ed941748fbbf2036 (diff)
parentdbeaca78bc6c0d4719a522e447fa59d7a1006ae0 (diff)
downloadotp-320a02e522085fe5eec141d7bf18631e4ef74f0a.tar.gz
otp-320a02e522085fe5eec141d7bf18631e4ef74f0a.tar.bz2
otp-320a02e522085fe5eec141d7bf18631e4ef74f0a.zip
Merge branch 'rickard/ei-ext/OTP-15442' into rickard/ei-ext-maint/OTP-15442
* rickard/ei-ext/OTP-15442: Introduce ei_init() Fix bug in ei_accept_tmo Fix build of erl_interface on BSD
Diffstat (limited to 'lib/erl_interface/src/connect/ei_resolve.c')
-rw-r--r--lib/erl_interface/src/connect/ei_resolve.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/erl_interface/src/connect/ei_resolve.c b/lib/erl_interface/src/connect/ei_resolve.c
index 022a43d255..225fddc784 100644
--- a/lib/erl_interface/src/connect/ei_resolve.c
+++ b/lib/erl_interface/src/connect/ei_resolve.c
@@ -57,9 +57,9 @@
#ifdef HAVE_GETHOSTBYNAME_R
-void ei_init_resolve(void)
+int ei_init_resolve(void)
{
- return; /* Do nothing */
+ return 0; /* Do nothing */
}
#else /* !HAVE_GETHOSTBYNAME_R */
@@ -103,7 +103,7 @@ static int verify_dns_configuration(void);
* our own, which are just wrappers around hostGetByName() and
* hostGetByAddr(). Here we look up the functions.
*/
-void ei_init_resolve(void)
+int ei_init_resolve(void)
{
#ifdef VXWORKS
@@ -134,9 +134,12 @@ void ei_init_resolve(void)
#ifdef _REENTRANT
ei_gethost_sem = ei_mutex_create();
+ if (!ei_gethost_sem)
+ return ENOMEM;
#endif /* _REENTRANT */
ei_resolve_initialized = 1;
+ return 0;
}
#ifdef VXWORKS
@@ -312,9 +315,11 @@ static struct hostent *my_gethostbyname_r(const char *name,
struct hostent *src;
struct hostent *rval = NULL;
- /* FIXME this should have been done in 'erl'_init()? */
- if (!ei_resolve_initialized) ei_init_resolve();
-
+ if (!ei_resolve_initialized) {
+ *h_errnop = NO_RECOVERY;
+ return NULL;
+ }
+
#ifdef _REENTRANT
/* === BEGIN critical section === */
if (ei_mutex_lock(ei_gethost_sem,0) != 0) {
@@ -377,7 +382,10 @@ static struct hostent *my_gethostbyaddr_r(const char *addr,
struct hostent *rval = NULL;
/* FIXME this should have been done in 'erl'_init()? */
- if (!ei_resolve_initialized) ei_init_resolve();
+ if (!ei_resolve_initialized) {
+ *h_errnop = NO_RECOVERY;
+ return NULL;
+ }
#ifdef _REENTRANT
/* === BEGIN critical section === */