Package erjang

Examples of erjang.EInternalPID


      if (log.isLoggable(Level.FINE)) log.fine("cr="+cr+"; node="+node+"; is_name="+is_node_name_atom(node));
      throw ERT.badarg(arg_node, arg_creation);
    }

    EObject net_kernel = ERT.whereis(am_net_kernel);   
    EInternalPID nk = net_kernel.testInternalPID();
    if (nk == null) {
      throw new ErlangError(EAtom.intern("no_net_kernel"));
    }
   
    nk.set_dist_entry(this_dist_entry);
    // nk.add_flag( F_DISTRIBUTION );
   
    set_this_node(node, cr.value);
    erts_is_alive = ERT.TRUE;
View Full Code Here


    EAtom type = am_set;
    EAtom access = am_protected;
    int keypos = 1;
    boolean write_concurrency = false;
    boolean read_concurrency = false;
    EInternalPID heir_pid = null;
    EObject heir_data = null;
    boolean is_named = false;

    for (; !opts.isNil(); opts = opts.tail()) {
      EObject option = opts.head();

      EAtom atom;
      ETuple2 t2;
      ETuple3 t3;
      if ((atom = option.testAtom()) != null) {
        if (atom == am_bag || atom == am_duplicate_bag
            || atom == am_set || atom == am_ordered_set) {
          type = atom;
          continue;
        } else if (atom == am_public || atom == am_private
            || atom == am_protected) {
          access = atom;
          continue;
        } else if (atom == am_named_table) {
          is_named = true;
          continue;
        }
      } else if ((t2 = ETuple2.cast(option)) != null) {
        ESmall pos;
        if (t2.elem1 == am_heir && t2.elem2 == am_none) {
          heir_data = null;
          heir_pid = null;
          continue;
        } else if (t2.elem1 == am_keypos
               && ((pos = t2.elem2.testSmall()) != null)
               && pos.value >= 1) {
          keypos = pos.value;
          continue;
        } else if (t2.elem1 == am_write_concurrency) {
          write_concurrency = (t2.elem2 == ERT.TRUE);
          continue;
        } else if (t2.elem1 == am_read_concurrency) {
          read_concurrency = (t2.elem2 == ERT.TRUE);
          continue;
        }
      } else if ((t3 = ETuple3.cast(option)) != null) {
        if (t3.elem1 == am_heir
            && ((heir_pid = t3.elem2.testInternalPID()) != null)) {
         
          if (!heir_pid.is_alive()) {
            heir_pid = null;
          } else {
            heir_data = t3.elem3;
          }
         
View Full Code Here

    return ERT.TRUE;
  }
 
  @BIF static public EObject give_away(EProc proc, EObject tab, EObject pid, EObject giftData) throws Pausable
  {
    EInternalPID giveTo = pid.testInternalPID();
    ETable table = resolve(proc, tab, true);   
    if (table == null
                || giveTo==null || !giveTo.is_alive() /* "Pid must be alive and local" */
                || giveTo == table.owner_pid()        /* "... and not already the owner of the table" */
                || table.owner_pid() != proc.self_handle()) /* "The calling process must be the table owner" */
        {
      throw ERT.badarg(tab, pid, giftData);
    }
View Full Code Here

  public void on_exit(EInternalPID dyingPID)
    throws Pausable
  {
    if (dyingPID == owner_pid()) {
     
      EInternalPID heirPID = this.heirPID;
            if (heirPID != null && heirPID != dyingPID) {
                transfer_ownership_to(heirPID,
                        this.heirData == null ? ERT.NIL : this.heirData);
            } else {
                //System.err.println("received exit from owner "+dyingPID+" => delete");
View Full Code Here

      Native.log.warning("table "+aname+" ("+tid+") received exit from unrelated "+dyingPID);
    }
  }

    public void transfer_ownership_to(EInternalPID new_owner, EObject transfer_data) throws Pausable {
        EInternalPID former_owner = owner_pid();
        System.err.println("DB| transfer ownership of "+tid+" from "+former_owner+" to "+new_owner+" with tag "+transfer_data);
        EProc new_owner_task;
        if ((new_owner_task = new_owner.task()) != null) {
            //System.err.println("received exit from owner "+former_owner
            //          +" => transfer to "+new_owner_task);

            ETuple msg = ETuple.make(EAtom.intern("ETS-TRANSFER"),
                    this.is_named ? this.aname : this.tid,
                    former_owner,
                    transfer_data);

            this.owner = new WeakReference<EProc>(new_owner_task);
            new_owner_task.add_exit_hook(this);
            former_owner.remove_exit_hook(this);

            new_owner.send(former_owner, msg);
        } else {
            delete();
        }
View Full Code Here

            delete();
        }
    }

    void delete() {
    EInternalPID p = owner_pid();
    if (p != null) p.remove_exit_hook(this);
   
    Native.tid_to_table.remove(tid);
    if (is_named) {
      Native.name_to_tid.remove(aname);
    }
View Full Code Here

  public void setopt(EObject head) {
   
    ETuple3 tup = ETuple3.cast(head);
    if (tup != null) {

      EInternalPID pid;
      if (tup.elem1 == Native.am_heir
          && (pid=tup.elem2.testInternalPID()) != null)
      {
        if (!pid.is_alive()) {
          this.heirPID = null;
          this.heirData = ERT.NIL;
          return;
        }

        EInternalPID old = this.heirPID;
       
        this.heirData = tup.elem3;
        this.heirPID = pid;

        pid.add_exit_hook(this);

        if (old != null) {
          old.remove_exit_hook(this);
        }
       
        return;
      }
     
    }
   
    ETuple2 tup2 = ETuple2.cast(head);
    if (tup2 != null) {
     
      if (tup2.elem1 == Native.am_protection) {
        EObject mode = tup2.elem2;
        if (mode == Native.am_private
            || mode == Native.am_public
            || mode == Native.am_protected) {
          this.access = (EAtom) mode;
          return;
        }
      } else if (tup2.elem1 == Native.am_heir
          && tup2.elem2 == Native.am_none) {

        EInternalPID old = this.heirPID;
       
        this.heirPID = null;
        this.heirData = ERT.NIL;

        if (old != null) {
          old.remove_exit_hook(this);
        }
        return;
      }
     
    }
View Full Code Here

        return this_task.getName();
      }
    };

    // two-way link to new owner
    EInternalPID caller_pid = caller.testInternalPID();
    if (caller_pid != null) {
      caller_pid.task().link_oneway(driver.self_handle());
      driver.link_oneway(caller_pid);
    }
    ERT.run(driver);

    return copy;
View Full Code Here

  @BIF
  static EObject port_connect(EProc proc, EObject arg_port, EObject arg_pid) throws Pausable
  {
    EInternalPort iport;
    EInternalPID ipid;
   
    if ((iport=arg_port.testInternalPort()) == null) {
      EAtom port_name = arg_port.testAtom();
      EObject resolved;
      if (port_name != null
        && (resolved=ERT.whereis(port_name)) != ERT.am_undefined
        && (iport=resolved.testInternalPort()) != null) {
        // ok //
      } else {
        throw ERT.badarg(arg_port, arg_pid);
      }
    }

    if ((ipid=arg_pid.testInternalPID()) == null) {
      EAtom pid_name = arg_pid.testAtom();
      EObject resolved;
      if (pid_name != null
        && (resolved=ERT.whereis(pid_name)) != ERT.am_undefined
        && (ipid=resolved.testInternalPID()) != null) {
        // ok //
      } else {
        throw ERT.badarg(arg_port, arg_pid);
      }
    }

    // TODO: what if port or pid args are already dead?
   
    iport.set_owner(ipid);
    ipid.task().link_to(iport);
   
    return ERT.TRUE;
   
  }
View Full Code Here

TOP

Related Classes of erjang.EInternalPID

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.