bug in pid()?

Rickard Green rickard.s.green@REDACTED
Wed Aug 6 10:12:20 CEST 2003


Comment cut from external.c:

  *   Valid creations for nodes are 1, 2, or 3. 0 can also be sent
  *   as creation, though. When 0 is used as creation, the real creation
  *   is unknown. Creation 0 on data will be changed to current
  *   creation of the node which it belongs to when it enters
  *   that node.
  *       This typically happens when a remote pid is created with
  *   list_to_pid/1 and then sent to the remote node. This behavior
  *   has the undesirable effect that a pid can be passed between nodes,
  *   and as a result of that not being equal to itself (the pid that
  *   comes back isn't equal to the original pid).

c:pid/3 uses list_to_pid/1 when creating the pid.

Note that list_to_pid/1 and c:pid/3 are only intended to be used for 
debugging and testing. They should not be used in application programs.

Rickard Green, Erlang/OTP

Daniel Solaz wrote:
> is this a bug?
> node1> self().
> <0,41,0>
> node1> global:register_name(shell1, self()).
> yes
> node1> global:whereis_name(shell1) == pid(0, 41, 0).
> true
> node2> global:whereis_name(shell1) == pid(3822, 41, 0).
> false
> comparison is true when pid is local but false when remote
> tested with
> R9B-1 and P9C (July 28) on FreeBSD/x86
> R9B-1 on Linux/x86 and Linux/HPPA

More information about the erlang-questions mailing list