Status TryInit(OpKernelContext* ctx, IteratorResource** iterator,
ContainerInfo* cinfo) {
TF_RETURN_IF_ERROR(cinfo->Init(ctx->resource_manager(), def()));
- FunctionLibraryRuntime* lib = ctx->function_library();
+
+ FunctionLibraryRuntime* lib;
+ std::unique_ptr<FunctionLibraryDefinition> flib_def(nullptr);
+ std::unique_ptr<ProcessFunctionLibraryRuntime> pflr(nullptr);
+ TF_RETURN_IF_ERROR(ctx->function_library()->Clone(&flib_def, &pflr, &lib));
// Create an IteratorResource that will hold the iterator for this op.
TF_RETURN_IF_ERROR(
ctx->resource_manager()->LookupOrCreate<IteratorResource>(
cinfo->container(), cinfo->name(), iterator,
- [lib, this](IteratorResource** ret) EXCLUSIVE_LOCKS_REQUIRED(mu_) {
- *ret = new IteratorResource(output_dtypes_, output_shapes_,
- graph_def_version_, nullptr, nullptr,
- nullptr, lib);
- return Status::OK();
- }));
+ [lib, this, &flib_def, &pflr](IteratorResource** ret)
+ EXCLUSIVE_LOCKS_REQUIRED(mu_) {
+ *ret = new IteratorResource(
+ output_dtypes_, output_shapes_, graph_def_version_,
+ nullptr, std::move(flib_def), std::move(pflr), lib);
+ return Status::OK();
+ }));
core::ScopedUnref unref_iterator(*iterator);