Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The usage of parent scope in the scope design. #2781

Closed
qingqing01 opened this issue Jul 10, 2017 · 2 comments
Closed

The usage of parent scope in the scope design. #2781

qingqing01 opened this issue Jul 10, 2017 · 2 comments
Assignees

Comments

@qingqing01
Copy link
Contributor

The scope has a parent scope with shared_ptr type and has a constructor for it:

explicit Scope(const std::shared_ptr<Scope>& parent) : parent_(parent) {}

But the scope pointer is used in the operator as follows:

class OpContext {
 public:
  Scope* scope;
  DeviceContext* device_context;
};

In the recurrent operator, we want to create a new local scope with a global parent scope. The global parent scope is passed by the network. There is a potential danger. If the local scope is released, reference count of parent scope will be decrease to zero, then the parent scope, namely global scope, will be released too. We can simply test this case in the scope_test.cc as follows. There will be an error.

TEST(Scope, Parent) {
  using paddle::framework::Scope;
  using paddle::framework::Variable;

  // auto parent_scope = std::make_shared<Scope>();
  Scope* parent_scope = new Scope();
  Variable* var0 = parent_scope->CreateVariable("a");
  EXPECT_NE(var0, nullptr);

  {
    auto scope = std::make_shared<Scope>(std::shared_ptr<Scope>(parent_scope));
    /// GetVariable will get Variable from parent scope if exist.
    Variable* var1 = scope->GetVariable("a");
    EXPECT_EQ(var0, var1);
  } // the scope will be released

  Variable* var2 = parent_scope->GetVariable("a");
  EXPECT_EQ(var0, var2);
}
@qingqing01 qingqing01 changed the title The usage problem of parent scope in the scope design. The usage of parent scope in the scope design. Jul 10, 2017
This was referenced Jul 10, 2017
@reyoung
Copy link
Collaborator

reyoung commented Jul 10, 2017

So, it seems that OpContext should hold a shared pointer of Scope?

@jacquesqiao
Copy link
Member

ok, i will change the Scope in OpContext to shared_ptr

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants