summaryrefslogtreecommitdiff
path: root/lib/erl_interface
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2020-04-27 11:39:08 +0200
committerRickard Green <rickard@erlang.org>2020-05-02 05:24:35 +0200
commit2b843cf280d7f9d3154ec63766fc5181a190a988 (patch)
tree7a2d3bcf1bc90fa7435b5869b13875e1e0c9640c /lib/erl_interface
parentbb79f53b78321d6d0917e218e903e4c14128d937 (diff)
downloaderlang-2b843cf280d7f9d3154ec63766fc5181a190a988.tar.gz
Do not modify 'self' in 'ei_cnode' structure after initialization
Diffstat (limited to 'lib/erl_interface')
-rw-r--r--lib/erl_interface/doc/src/ei_connect.xml13
-rw-r--r--lib/erl_interface/src/connect/ei_connect.c6
-rw-r--r--lib/erl_interface/src/global/global_names.c1
-rw-r--r--lib/erl_interface/src/global/global_unregister.c2
-rw-r--r--lib/erl_interface/src/global/global_whereis.c2
-rw-r--r--lib/erl_interface/src/registry/reg_dump.c18
-rw-r--r--lib/erl_interface/src/registry/reg_restore.c20
7 files changed, 20 insertions, 42 deletions
diff --git a/lib/erl_interface/doc/src/ei_connect.xml b/lib/erl_interface/doc/src/ei_connect.xml
index f991165df7..b5c6629929 100644
--- a/lib/erl_interface/doc/src/ei_connect.xml
+++ b/lib/erl_interface/doc/src/ei_connect.xml
@@ -1076,17 +1076,8 @@ if (ei_decode_version(result.buff, &index) < 0
<c>erlang_pid</c>,
which is to be the process identifier of the sending process
(in the Erlang distribution protocol).</p>
- <p>A suitable <c>erlang_pid</c> can be constructed from the
- <c>ei_cnode</c> structure by the following example
- code:</p>
- <code type="none"><![CDATA[
-ei_cnode ec;
-erlang_pid *self;
-int fd; /* the connection fd */
-...
-self = ei_self(&ec);
-self->num = fd;
- ]]></code>
+ <p>A suitable <c>erlang_pid</c> can be retrieved from the
+ <c>ei_cnode</c> structure by calling <c>ei_self(cnode_pointer)</c>.</p>
</desc>
</func>
diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c
index c95891f166..e536f14fcd 100644
--- a/lib/erl_interface/src/connect/ei_connect.c
+++ b/lib/erl_interface/src/connect/ei_connect.c
@@ -1475,11 +1475,8 @@ int ei_receive(int fd, unsigned char *bufp, int bufsize)
int ei_reg_send_tmo(ei_cnode* ec, int fd, char *server_name,
char* buf, int len, unsigned ms)
{
- erlang_pid *self = ei_self(ec);
- self->num = fd;
-
/* erl_errno and return code is set by ei_reg_send_encoded_tmo() */
- return ei_send_reg_encoded_tmo(fd, self, server_name, buf, len, ms);
+ return ei_send_reg_encoded_tmo(fd, ei_self(ec), server_name, buf, len, ms);
}
@@ -1589,7 +1586,6 @@ int ei_rpc_to(ei_cnode *ec, int fd, char *mod, char *fun,
ei_x_buff x;
erlang_pid *self = ei_self(ec);
int err = ERL_ERROR;
- self->num = fd;
/* encode header */
if (ei_x_new_with_version(&x) < 0)
diff --git a/lib/erl_interface/src/global/global_names.c b/lib/erl_interface/src/global/global_names.c
index 028e872916..4524439467 100644
--- a/lib/erl_interface/src/global/global_names.c
+++ b/lib/erl_interface/src/global/global_names.c
@@ -53,7 +53,6 @@ char **ei_global_names(ei_cnode *ec, int fd, int *count)
char **names;
char *s;
- self->num = fd;
if (ei_encode_version(buf,&index)
|| ei_encode_tuple_header(buf,&index,2)
|| ei_encode_pid(buf,&index,self) /* PidFrom */
diff --git a/lib/erl_interface/src/global/global_unregister.c b/lib/erl_interface/src/global/global_unregister.c
index 35e242b13f..4743fe65d7 100644
--- a/lib/erl_interface/src/global/global_unregister.c
+++ b/lib/erl_interface/src/global/global_unregister.c
@@ -41,8 +41,6 @@ int ei_global_unregister(ei_cnode *ec, int fd, const char *name)
int version,arity,msglen;
int needunlink, needatom, needdemonitor;
- /* make a self pid */
- self->num = fd;
if (ei_encode_version(buf,&index)
|| ei_encode_tuple_header(buf,&index,2)
|| ei_encode_pid(buf,&index,self) /* PidFrom */
diff --git a/lib/erl_interface/src/global/global_whereis.c b/lib/erl_interface/src/global/global_whereis.c
index 1af5626f4f..5a6134c2ab 100644
--- a/lib/erl_interface/src/global/global_whereis.c
+++ b/lib/erl_interface/src/global/global_whereis.c
@@ -45,8 +45,6 @@ int ei_global_whereis(ei_cnode *ec, int fd, const char *name, erlang_pid* pid, c
int i;
int version,arity,msglen;
- self->num = fd; /* FIXME looks strange to change something?! */
-
if (ei_encode_version(buf,&index)
|| ei_encode_tuple_header(buf,&index,2)
|| ei_encode_pid(buf,&index,self) /* PidFrom */
diff --git a/lib/erl_interface/src/registry/reg_dump.c b/lib/erl_interface/src/registry/reg_dump.c
index a027c4cdf5..3c7f2a9e9e 100644
--- a/lib/erl_interface/src/registry/reg_dump.c
+++ b/lib/erl_interface/src/registry/reg_dump.c
@@ -255,7 +255,7 @@ static int mn_get_unlink(int fd)
int ei_reg_dump(int fd, ei_reg *reg, const char *mntab, int flags)
{
ei_hash *tab;
- erlang_pid self;
+ erlang_pid *self;
erlang_pid mnesia;
ei_bucket *b;
ei_reg_obj *obj;
@@ -271,12 +271,10 @@ int ei_reg_dump(int fd, ei_reg *reg, const char *mntab, int flags)
if ((ec = ei_fd_to_cnode(fd)) == NULL) {
return -1;
}
- strcpy(self.node,ei_thisnodename(ec));
- self.num = fd;
- self.serial = 0;
- self.creation = ei_thiscreation(ec);
- if (mn_start_dump(fd,&self,&mnesia,mntab)) return -1;
+ self = ei_self(ec);
+
+ if (mn_start_dump(fd,self,&mnesia,mntab)) return -1;
/* traverse the table, passing objects to mnesia */
for (i=0; i<tab->size; i++) {
@@ -288,13 +286,13 @@ int ei_reg_dump(int fd, ei_reg *reg, const char *mntab, int flags)
if ((flags & EI_FORCE) || (obj->attr & EI_DIRTY)) {
if (obj->attr & EI_DELET) {
if (mn_send_delete(fd,&mnesia,key)) {
- ei_send_exit(fd,&self,&mnesia,"delete failed");
+ ei_send_exit(fd,self,&mnesia,"delete failed");
return -1;
}
}
else {
if (mn_send_write(fd,&mnesia,key,obj)) {
- ei_send_exit(fd,&self,&mnesia,"update failed");
+ ei_send_exit(fd,self,&mnesia,"update failed");
return -1;
}
}
@@ -304,8 +302,8 @@ int ei_reg_dump(int fd, ei_reg *reg, const char *mntab, int flags)
}
/* end the transaction */
- if (mn_send_commit(fd,&mnesia,&self)) {
- ei_send_exit(fd,&self,&mnesia,"commit failed");
+ if (mn_send_commit(fd,&mnesia,self)) {
+ ei_send_exit(fd,self,&mnesia,"commit failed");
return -1;
}
diff --git a/lib/erl_interface/src/registry/reg_restore.c b/lib/erl_interface/src/registry/reg_restore.c
index 75d073303f..030bab19b9 100644
--- a/lib/erl_interface/src/registry/reg_restore.c
+++ b/lib/erl_interface/src/registry/reg_restore.c
@@ -227,7 +227,7 @@ int ei_reg_restore(int fd, ei_reg *reg, const char *mntab)
char *dbuf = NULL;
char *msgbuf = NULL;
char *keybuf = NULL;
- erlang_pid self;
+ erlang_pid *self;
erlang_pid mnesia = {"",0,0,0};
erlang_msg msg;
int index = 0;
@@ -247,20 +247,18 @@ int ei_reg_restore(int fd, ei_reg *reg, const char *mntab)
if ((ec = ei_fd_to_cnode(fd)) == NULL) {
return -1;
}
- strcpy(self.node,ei_thisnodename(ec));
- self.num = fd;
- self.serial = 0;
- self.creation = ei_thiscreation(ec);
+
+ self = ei_self(ec);
- if (mn_start_restore(fd,&self,&mnesia,mntab,&count,&maxkey,&maxobj)) {
+ if (mn_start_restore(fd,self,&mnesia,mntab,&count,&maxkey,&maxobj)) {
/* send exit *only* if we have pid */
- if (mnesia.node[0]) ei_send_exit(fd,&self,&mnesia,"bad response from rpc start");
+ if (mnesia.node[0]) ei_send_exit(fd,self,&mnesia,"bad response from rpc start");
return -1;
}
if (count <= 0) {
- ei_send_exit(fd,&self,&mnesia,"nothing to do");
+ ei_send_exit(fd,self,&mnesia,"nothing to do");
return 0;
}
@@ -268,7 +266,7 @@ int ei_reg_restore(int fd, ei_reg *reg, const char *mntab)
len = maxkey + maxobj + 512;
if (len > EISMALLBUF)
if (!(dbuf = malloc(len))) {
- ei_send_exit(fd,&self,&mnesia,"cannot allocate space for incoming data");
+ ei_send_exit(fd,self,&mnesia,"cannot allocate space for incoming data");
return -1;
}
msgbuf = (dbuf ? dbuf : sbuf);
@@ -281,7 +279,7 @@ int ei_reg_restore(int fd, ei_reg *reg, const char *mntab)
ei_encode_version(msgbuf,&index);
ei_encode_tuple_header(msgbuf,&index,2);
ei_encode_atom(msgbuf,&index,"send_records");
- ei_encode_pid(msgbuf,&index,&self);
+ ei_encode_pid(msgbuf,&index,self);
if (ei_send_encoded(fd,&mnesia,msgbuf,index)) goto restore_failure;
/* read as much as possible, until count or EXIT */
@@ -317,7 +315,7 @@ int ei_reg_restore(int fd, ei_reg *reg, const char *mntab)
return 0;
restore_failure:
- ei_send_exit(fd,&self,&mnesia,"restore failure");
+ ei_send_exit(fd,self,&mnesia,"restore failure");
if (keybuf) free(keybuf);
if (dbuf) free(dbuf);
return -1;