From f6ff116505f4e8c78911bd8941d4d452127b0a8a Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 15 Dec 2015 14:27:49 +0800 Subject: [PATCH] refine code, persistence use isolate method. --- trunk/src/app/srs_app_config.cpp | 26 +++++++++++++++++++++++--- trunk/src/app/srs_app_config.hpp | 5 +++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index ea619737e..899c86b5f 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -628,6 +628,11 @@ SrsConfDirective::~SrsConfDirective() } SrsConfDirective* SrsConfDirective::copy() +{ + return copy(""); +} + +SrsConfDirective* SrsConfDirective::copy(string except) { SrsConfDirective* cp = new SrsConfDirective(); @@ -637,7 +642,10 @@ SrsConfDirective* SrsConfDirective::copy() for (int i = 0; i < (int)directives.size(); i++) { SrsConfDirective* directive = directives.at(i); - cp->directives.push_back(directive->copy()); + if (!except.empty() && directive->name == except) { + continue; + } + cp->directives.push_back(directive->copy(except)); } return cp; @@ -1982,8 +1990,8 @@ int SrsConfig::persistence() return ret; } - // persistence root directive to writer. - if ((ret = root->persistence(&fw, 0)) != ERROR_SUCCESS) { + // do persistence to writer. + if ((ret = do_persistence(&fw)) != ERROR_SUCCESS) { ::unlink(path.c_str()); return ret; } @@ -2000,6 +2008,18 @@ int SrsConfig::persistence() return ret; } +int SrsConfig::do_persistence(SrsFileWriter* fw) +{ + int ret = ERROR_SUCCESS; + + // persistence root directive to writer. + if ((ret = root->persistence(fw, 0)) != ERROR_SUCCESS) { + return ret; + } + + return ret; +} + int SrsConfig::minimal_to_json(SrsJsonObject* obj) { int ret = ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index 91d1c2c02..843937fd4 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -192,6 +192,8 @@ public: * so need to copy it to an old root directive, and use the copy result to do reload. */ virtual SrsConfDirective* copy(); + // @param except the name of sub directive. + virtual SrsConfDirective* copy(std::string except); // args public: /** @@ -414,6 +416,9 @@ public: * persistence current config to file. */ virtual int persistence(); +private: + virtual int do_persistence(SrsFileWriter* fw); +public: /** * dumps the global sections to json. */