Skip to content

Commit

Permalink
Make context data synchronized
Browse files Browse the repository at this point in the history
  • Loading branch information
purplefox committed May 18, 2015
1 parent 80b6093 commit 8dfcc0d
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 32 deletions.
13 changes: 10 additions & 3 deletions src/main/java/io/vertx/core/impl/ContextImpl.java
Expand Up @@ -27,6 +27,7 @@
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
Expand All @@ -39,7 +40,7 @@ public abstract class ContextImpl implements Context {


private static final Logger log = LoggerFactory.getLogger(ContextImpl.class); private static final Logger log = LoggerFactory.getLogger(ContextImpl.class);


public final VertxInternal owner; protected final VertxInternal owner;
protected final String deploymentID; protected final String deploymentID;
protected final JsonObject config; protected final JsonObject config;
private Deployment deployment; private Deployment deployment;
Expand All @@ -50,6 +51,7 @@ public abstract class ContextImpl implements Context {
protected final Executor workerExec; protected final Executor workerExec;
protected VertxThread contextThread; protected VertxThread contextThread;
private volatile boolean closeHooksRun; private volatile boolean closeHooksRun;
private Map<String, Object> contextData;


protected ContextImpl(VertxInternal vertx, Executor orderedInternalPoolExec, Executor workerExec, String deploymentID, JsonObject config, protected ContextImpl(VertxInternal vertx, Executor orderedInternalPoolExec, Executor workerExec, String deploymentID, JsonObject config,
ClassLoader tccl) { ClassLoader tccl) {
Expand Down Expand Up @@ -151,8 +153,6 @@ public void runCloseHooks(Handler<AsyncResult<Void>> completionHandler) {
@Override @Override
public abstract boolean isMultiThreadedWorkerContext(); public abstract boolean isMultiThreadedWorkerContext();


public abstract Map<String, Object> contextData();

@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T> T get(String key) { public <T> T get(String key) {
Expand Down Expand Up @@ -247,6 +247,13 @@ public <T> void executeBlocking(Handler<Future<T>> blockingCodeHandler, Handler<
executeBlocking(null, blockingCodeHandler, false, resultHandler); executeBlocking(null, blockingCodeHandler, false, resultHandler);
} }


protected synchronized Map<String, Object> contextData() {
if (contextData == null) {
contextData = new ConcurrentHashMap<>();
}
return contextData;
}

private <T> void executeBlocking(Action<T> action, Handler<Future<T>> blockingCodeHandler, boolean internal, private <T> void executeBlocking(Action<T> action, Handler<Future<T>> blockingCodeHandler, boolean internal,
Handler<AsyncResult<T>> resultHandler) { Handler<AsyncResult<T>> resultHandler) {
try { try {
Expand Down
15 changes: 1 addition & 14 deletions src/main/java/io/vertx/core/impl/EventLoopContext.java
Expand Up @@ -21,8 +21,6 @@
import io.vertx.core.logging.Logger; import io.vertx.core.logging.Logger;
import io.vertx.core.logging.impl.LoggerFactory; import io.vertx.core.logging.impl.LoggerFactory;


import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;


/** /**
Expand Down Expand Up @@ -60,16 +58,5 @@ protected void checkCorrectThread() {
throw new IllegalStateException("Event delivered on unexpected thread " + current + " expected: " + contextThread); throw new IllegalStateException("Event delivered on unexpected thread " + current + " expected: " + contextThread);
} }
} }


private Map<String, Object> contextData;

@Override
public Map<String, Object> contextData() {
if (contextData == null) {
contextData = new HashMap<>();
}
return contextData;
}


} }
15 changes: 0 additions & 15 deletions src/main/java/io/vertx/core/impl/WorkerContext.java
Expand Up @@ -19,8 +19,6 @@
import io.vertx.core.Handler; import io.vertx.core.Handler;
import io.vertx.core.json.JsonObject; import io.vertx.core.json.JsonObject;


import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;


/** /**
Expand Down Expand Up @@ -53,24 +51,11 @@ protected void checkCorrectThread() {
// NOOP // NOOP
} }


private Map<String, Object> contextData;

@Override
public Map<String, Object> contextData() {
if (contextData == null) {
contextData = new ConcurrentHashMap<>();
}
return contextData;
}

// In the case of a worker context, the IO will always be provided on an event loop thread, not a worker thread // In the case of a worker context, the IO will always be provided on an event loop thread, not a worker thread
// so we need to execute it on the worker thread // so we need to execute it on the worker thread
@Override @Override
public void executeFromIO(ContextTask task) { public void executeFromIO(ContextTask task) {
workerExec.execute(wrapTask(task, null, true)); workerExec.execute(wrapTask(task, null, true));
} }





} }

0 comments on commit 8dfcc0d

Please sign in to comment.