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.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
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);

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

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

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

@Override
@SuppressWarnings("unchecked")
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);
}

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,
Handler<AsyncResult<T>> resultHandler) {
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.impl.LoggerFactory;

import java.util.HashMap;
import java.util.Map;
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);
}
}

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.json.JsonObject;

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

/**
Expand Down Expand Up @@ -53,24 +51,11 @@ protected void checkCorrectThread() {
// 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
// so we need to execute it on the worker thread
@Override
public void executeFromIO(ContextTask task) {
workerExec.execute(wrapTask(task, null, true));
}




}

0 comments on commit 8dfcc0d

Please sign in to comment.