summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorJinkun Jang <jinkun.jang@samsung.com>2013-03-16 01:15:44 +0900
committerJinkun Jang <jinkun.jang@samsung.com>2013-03-16 01:15:44 +0900
commit3ff947580f7829ddff385f73d59faeb96e52dcf3 (patch)
tree838c082eea3a355ff694d86cf6d542c92c81b58a /server
parentb8ccdef0306cf19cde9511ec244fd43b4ae1d863 (diff)
downloadlibmedia-thumbnail-3ff947580f7829ddff385f73d59faeb96e52dcf3.tar.gz
libmedia-thumbnail-3ff947580f7829ddff385f73d59faeb96e52dcf3.tar.bz2
libmedia-thumbnail-3ff947580f7829ddff385f73d59faeb96e52dcf3.zip
merge with master
Diffstat (limited to 'server')
-rwxr-xr-xserver/include/thumb-server-internal.h1
-rwxr-xr-xserver/thumb-server-internal.c48
-rwxr-xr-xserver/thumb-server.c6
3 files changed, 53 insertions, 2 deletions
diff --git a/server/include/thumb-server-internal.h b/server/include/thumb-server-internal.h
index cbf8644..d8a16f3 100755
--- a/server/include/thumb-server-internal.h
+++ b/server/include/thumb-server-internal.h
@@ -46,6 +46,7 @@ gboolean _thumb_daemon_udp_thread(void *data);
gboolean _thumb_daemon_start_jobs(gpointer data);
void _thumb_daemon_finish_jobs();
+void _thumb_daemon_vconf_cb(void *data);
gboolean _thumb_server_prepare_socket(int *sock_fd);
gboolean _thumb_server_read_socket(GIOChannel *src,
GIOCondition condition,
diff --git a/server/thumb-server-internal.c b/server/thumb-server-internal.c
index 3844fcb..98416d6 100755
--- a/server/thumb-server-internal.c
+++ b/server/thumb-server-internal.c
@@ -26,7 +26,7 @@
#include <stdio.h>
#include <string.h>
#include <Ecore_Evas.h>
-
+#include <vconf.h>
#ifdef LOG_TAG
#undef LOG_TAG
@@ -43,6 +43,7 @@ GMainLoop *g_thumb_server_mainloop; // defined in thumb-server.c as extern
#ifdef _USE_MEDIA_UTIL_
gboolean _thumb_server_send_msg_to_agent(int msg_type);
#endif
+void _thumb_daemon_stop_job();
gboolean _thumb_daemon_start_jobs(gpointer data)
{
@@ -71,6 +72,46 @@ void _thumb_daemon_finish_jobs()
return;
}
+void _thumb_daemon_vconf_cb(void *data)
+{
+ int err = -1;
+ int status = 0;
+
+ thumb_warn("_thumb_daemon_vconf_cb called");
+
+ err = vconf_get_int(VCONFKEY_SYSMAN_MMC_FORMAT, &status);
+ if (err == 0) {
+ if (status == VCONFKEY_SYSMAN_MMC_FORMAT_COMPLETED) {
+ thumb_warn("SD card format is completed. So media-thumbnail-server stops jobs to extract all thumbnails");
+
+ _thumb_daemon_stop_job();
+ } else {
+ thumb_dbg("not completed");
+ }
+ } else if (err == -1) {
+ thumb_err("vconf_get_int failed : %d", err);
+ } else {
+ thumb_err("vconf_get_int Unexpected error code: %d", err);
+ }
+
+ return;
+}
+
+void _thumb_daemon_stop_job()
+{
+ int i = 0;
+ char *path = NULL;
+
+ thumb_warn("There are %d jobs in the queue. But all jobs will be stopped", g_idx - g_cur_idx);
+
+ for (i = g_cur_idx; i < g_idx; i++) {
+ path = arr_path[g_cur_idx++];
+ SAFE_FREE(path);
+ }
+
+ return;
+}
+
int _thumb_daemon_process_job(thumbMsg *req_msg, thumbMsg *res_msg)
{
int err = -1;
@@ -129,7 +170,8 @@ int _thumb_daemon_all_extract()
break;
}
- strncpy(path, (const char *)sqlite3_column_text(sqlite_stmt, 0), MAX_PATH_SIZE + 1);
+ strncpy(path, (const char *)sqlite3_column_text(sqlite_stmt, 0), sizeof(path));
+ path[sizeof(path) - 1] = '\0';
count = sqlite3_column_int(sqlite_stmt, 1);
thumb_dbg("Path : %s", path);
@@ -339,11 +381,13 @@ gboolean _thumb_server_send_msg_to_agent(int msg_type)
if (sendto(sock, &send_msg, sizeof(ms_thumb_server_msg), 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) != sizeof(ms_thumb_server_msg)) {
thumb_err("sendto failed: %s\n", strerror(errno));
+ close(sock);
return FALSE;
}
thumb_dbg("Sending msg to thumbnail agent[%d] is successful", send_msg.msg_type);
+ close(sock);
return TRUE;
}
#endif
diff --git a/server/thumb-server.c b/server/thumb-server.c
index 3b79684..9e7c1e1 100755
--- a/server/thumb-server.c
+++ b/server/thumb-server.c
@@ -27,6 +27,7 @@
#include <pthread.h>
#include <heynoti.h>
+#include <vconf.h>
//#include <signal.h>
//#include <glib-unix.h>
@@ -78,6 +79,11 @@ int main()
}
}
+ /* Set VCONFKEY_SYSMAN_MMC_FORMAT callback to get noti for SD card format */
+ err = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_FORMAT, (vconf_callback_fn) _thumb_daemon_vconf_cb, NULL);
+ if (err == -1)
+ thumb_err("vconf_notify_key_changed %s fails", VCONFKEY_SYSMAN_MMC_FORMAT);
+
/* Create and bind new UDP socket */
if (!_thumb_server_prepare_socket(&sockfd)) {
thumb_err("Failed to create socket\n");