pSpaces / jSpace

Programming with Spaces in Java
MIT License
17 stars 13 forks source link

RemoteSpace.put never works in conn mode if get is also in progress. #16

Closed TheAIBot closed 6 years ago

TheAIBot commented 6 years ago

Maybe related to #15?

Minimal example(Same as #15 but using conn instead of keep).

import java.io.IOException;
import java.net.UnknownHostException;

import org.jspace.ActualField;
import org.jspace.RemoteSpace;
import org.jspace.SequentialSpace;
import org.jspace.SpaceRepository;

public class TestStarter {  
    private static boolean t1Started = false;

    public static void main(String[] args) throws UnknownHostException, IOException {       
        final SpaceRepository rep = new SpaceRepository();
        rep.addGate("tcp://localhost:1290/?conn");
        final SequentialSpace space = new SequentialSpace();
        rep.add("space", space);
        final RemoteSpace remote = new RemoteSpace("tcp://localhost:1290/space?conn");

        final Thread t1 = new Thread(() -> {
            try {
                t1Started = true;
                System.out.println("Starting to get something");
                remote.get(new ActualField("something"));
                System.out.println("Got something");
            } catch (InterruptedException e) {
                e.printStackTrace(System.out);
            }   
        });     
        final Thread t2 = new Thread(() -> {
            System.out.println("Starting to put something");
            remote.put("something");
            System.out.println("Put something");
        });

        //first start the get
        t1.start();
        while (!t1Started) {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {}
        }

        //then start the put
        t2.start();
    }
}

Expected output is:

Starting to get something
Starting to put something
Put something
Got something

But is only either

Starting to get something
Starting to put something

Or

Starting to get something
Starting to put something
Exception in thread "Thread-0" Put something
java.lang.NullPointerException
    at org.jspace.RemoteSpace._get(RemoteSpace.java:104)
    at org.jspace.RemoteSpace.get(RemoteSpace.java:83)
    at starters.TestStarter.lambda$0(TestStarter.java:25)      <-- the get command
    at java.lang.Thread.run(Thread.java:745)