*/
#include <dlog.h>
+#include <malloc.h>
+#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
#include <notification_type.h>
#include "notification_ex_service.h"
#define NORMAL_UID_BASE 5000
+#define MAX_TIMEOUT 30 * 1000 /* 30 sec */
using namespace std;
using namespace notification;
}
}
}
+
+ void SetMemoryTrimTimer(void) {
+ static guint timer = 0;
+ if (timer > 0)
+ g_source_remove(timer);
+
+ timer = g_timeout_add(MAX_TIMEOUT, TimeoutHandler, &timer);
+ }
+
+ static gboolean TimeoutHandler(gpointer data) {
+ guint* timer = static_cast<guint*>(data);
+ sqlite3_release_memory(-1);
+ malloc_trim(0);
+ *timer = 0;
+
+ return false;
+ }
+
unique_ptr<Reporter> reporter_;
unique_ptr<Manager> manager_;
map<string, string> hide_map_;
default :
break;
}
+
+ facade_->SetMemoryTrimTimer();
}
list<shared_ptr<item::AbstractItem>> OnRequestEvent(const IEventInfo& info) override {
facade_->receiver_group_list_);
facade_->TranslateText(item_list);
+ facade_->SetMemoryTrimTimer();
return item_list;
}
int OnRequestNumber(const IEventInfo& info) override {
DBG("Get count !!! %s", info.GetItemId().c_str());
+ facade_->SetMemoryTrimTimer();
+
return DBManager::GetNotificationList(facade_->GetUid(info)).size();
}
DBG("SendError !!!");
SendError(info, static_cast<NotificationError>(ret));
}
+ facade_->SetMemoryTrimTimer();
}
void OnUpdate(const IEventInfo& info,
} else {
SendError(info, static_cast<NotificationError>(ret));
}
+ facade_->SetMemoryTrimTimer();
}
int DoDelete(const IEventInfo& info,
if (ret == ERROR_NONE)
facade_->LaunchDefaultViewer(deletedList, NOTIFICATION_OP_DELETE);
}
+ facade_->SetMemoryTrimTimer();
}
list<shared_ptr<item::AbstractItem>> OnRequestEvent(const IEventInfo& info) override {
DBG("Get !!! %s", info.GetOwner().c_str());
list<shared_ptr<item::AbstractItem>> item_list;
uid_t uid = facade_->GetUid(info);
+ facade_->SetMemoryTrimTimer();
+
if (info.GetItemId().empty()) {
if (!info.GetChannel().empty()) {
/* get by channel */
int count = 0;
DBG("Get count !!! %s, %s", info.GetOwner().c_str(), info.GetChannel().c_str());
DBManager::GetCount(info.GetOwner(), info.GetChannel(), facade_->GetUid(info), &count);
+ facade_->SetMemoryTrimTimer();
+
return count;
}
restart_count);
notification_init_default_viewer();
+ facade_->SetMemoryTrimTimer();
return ERROR_NONE;
}