diff -uNr gnokii/smsd/ChangeLog gnokii.new/smsd/ChangeLog --- gnokii/smsd/ChangeLog 2011-05-28 13:08:59.713665844 +0200 +++ gnokii.new/smsd/ChangeLog 2011-05-28 13:25:09.121747448 +0200 @@ -1,3 +1,9 @@ +* Sat 28 May 2011 Jan Derfinak +- After patch from 09 Apr 2011, the query interval for looking to outbox was + too small and smsd overloads db server. Added 5 seconds sleep if outbox + doesn't contain unprocessed sms. (Bug report from João Areias). + + * Fri 13 May 2011 Paweł Kot - Do not call GetSMSC every time SMS is being sent. diff -uNr gnokii/smsd/db.h gnokii.new/smsd/db.h --- gnokii/smsd/db.h 2011-02-26 22:26:16.682271333 +0100 +++ gnokii.new/smsd/db.h 2011-05-28 13:18:36.367208510 +0200 @@ -36,6 +36,6 @@ GNOKII_API gint (*DB_ConnectInbox) (const DBConfig); GNOKII_API gint (*DB_ConnectOutbox) (const DBConfig); GNOKII_API gint (*DB_InsertSMS) (const gn_sms * const, const gchar * const); -GNOKII_API void (*DB_Look) (const gchar * const); +GNOKII_API gint (*DB_Look) (const gchar * const); #endif diff -uNr gnokii/smsd/mysql.c gnokii.new/smsd/mysql.c --- gnokii/smsd/mysql.c 2011-04-09 20:30:46.015635006 +0200 +++ gnokii.new/smsd/mysql.c 2011-05-28 13:32:21.329405962 +0200 @@ -304,12 +304,13 @@ } -GNOKII_API void DB_Look (const gchar * const phone) +GNOKII_API gint DB_Look (const gchar * const phone) { GString *buf, *phnStr; MYSQL_RES *res1; MYSQL_ROW row; gint numError, error; + gint empty = 1; if (phone[0] == '\0') phnStr = g_string_new (""); @@ -335,7 +336,7 @@ g_print (_("Error: %s\n"), mysql_error (&mysqlOut)); mysql_real_query (&mysqlOut, "ROLLBACK TRANSACTION", strlen ("ROLLBACK TRANSACTION")); g_string_free (buf, TRUE); - return; + return (SMSD_NOK); } if (!(res1 = mysql_store_result (&mysqlOut))) @@ -344,13 +345,14 @@ g_print (_("Error: %s\n"), mysql_error (&mysqlOut)); mysql_real_query (&mysqlOut, "ROLLBACK TRANSACTION", strlen ("ROLLBACK TRANSACTION")); g_string_free (buf, TRUE); - return; + return (SMSD_NOK); } while ((row = mysql_fetch_row (res1))) { gn_sms sms; + empty = 0; gn_sms_default_submit (&sms); memset (&sms.remote.number, 0, sizeof (sms.remote.number)); sms.delivery_report = atoi (row[3]); @@ -403,4 +405,9 @@ mysql_real_query (&mysqlOut, "COMMIT", strlen ("COMMIT")); g_string_free (buf, TRUE); + + if (empty) + return (SMSD_OUTBOXEMPTY); + else + return (SMSD_OK); } diff -uNr gnokii/smsd/pq.c gnokii.new/smsd/pq.c --- gnokii/smsd/pq.c 2011-04-09 20:30:46.018968340 +0200 +++ gnokii.new/smsd/pq.c 2011-05-28 13:42:25.802797936 +0200 @@ -341,12 +341,13 @@ } -GNOKII_API void DB_Look (const gchar * const phone) +GNOKII_API gint DB_Look (const gchar * const phone) { GString *buf, *phnStr; PGresult *res1, *res2; register int i; gint numError, error; + gint empty = 1; if (phone[0] == '\0') phnStr = g_string_new (""); @@ -377,13 +378,14 @@ res1 = PQexec (connOut, "ROLLBACK TRANSACTION"); PQclear (res1); g_string_free (buf, TRUE); - return; + return (SMSD_NOK); } for (i = 0; i < PQntuples (res1); i++) { gn_sms sms; + empty = 0; gn_sms_default_submit (&sms); memset (&sms.remote.number, 0, sizeof (sms.remote.number)); sms.delivery_report = atoi (PQgetvalue (res1, i, 3)); @@ -433,4 +435,9 @@ PQclear (res1); g_string_free (buf, TRUE); + + if (empty) + return (SMSD_OUTBOXEMPTY); + else + return (SMSD_OK); } diff -uNr gnokii/smsd/smsd.c gnokii.new/smsd/smsd.c --- gnokii/smsd/smsd.c 2011-04-09 20:30:46.025635009 +0200 +++ gnokii.new/smsd/smsd.c 2011-05-28 13:33:45.278950805 +0200 @@ -71,7 +71,7 @@ gint (*DB_ConnectInbox) (const DBConfig) = NULL; gint (*DB_ConnectOutbox) (const DBConfig) = NULL; gint (*DB_InsertSMS) (const gn_sms * const, const gchar * const) = NULL; -void (*DB_Look) (const gchar * const) = NULL; +gint (*DB_Look) (const gchar * const) = NULL; static pthread_t db_monitor_th; pthread_mutex_t db_monitorMutex; @@ -372,7 +372,8 @@ } pthread_mutex_unlock (&db_monitorMutex); - (*DB_Look) (smsdConfig.phone); + if ((*DB_Look) (smsdConfig.phone) == SMSD_OUTBOXEMPTY) + sleep (5); } } diff -uNr gnokii/smsd/smsd.h gnokii.new/smsd/smsd.h --- gnokii/smsd/smsd.h 2011-02-26 22:26:16.702271334 +0100 +++ gnokii.new/smsd/smsd.h 2011-05-28 13:27:13.361074383 +0200 @@ -40,6 +40,7 @@ #define SMSD_NOK 1 #define SMSD_DUPLICATE 2 #define SMSD_WAITING 3 +#define SMSD_OUTBOXEMPTY 4 typedef enum { SMSD_READ_REPORTS = 1 diff -uNr gnokii/smsd/sqlite.c gnokii.new/smsd/sqlite.c --- gnokii/smsd/sqlite.c 2011-02-15 20:47:55.879469667 +0100 +++ gnokii.new/smsd/sqlite.c 2011-05-28 13:33:12.222463727 +0200 @@ -142,13 +142,14 @@ return SMSD_OK; } -GNOKII_API void DB_Look(const gchar * const phone) +GNOKII_API gint DB_Look(const gchar * const phone) { GString *buf, *phnStr, *timebuf; gint ret1, numError, error; time_t rawtime; struct tm * timeinfo; sqlite3_stmt * stmt; + gint empty = 1; if (phone[0] == '\0') phnStr = g_string_new(""); @@ -180,7 +181,7 @@ if (ret1 != SQLITE_OK) { g_print(_("%d: Parsing query %s failed!"), __LINE__, buf->str); g_print(_("Error: %s"), sqlite3_errmsg(ppDbInbox)); - return; + return (SMSD_NOK); } g_string_printf(timebuf, "'%02d-%02d-%02d %02d:%02d:%02d'", @@ -194,6 +195,7 @@ int gerror = 0; gn_sms sms; + empty = 0; gn_sms_default_submit(&sms); memset(&sms.remote.number, 0, sizeof (sms.remote.number)); sms.delivery_report = sqlite3_column_int(stmt, 3); @@ -241,11 +243,16 @@ g_string_free(timebuf, TRUE); g_string_free(buf, TRUE); - return; + return (SMSD_NOK); } sqlite3_finalize(stmt); sqlite3_exec(ppDbOutbox, "COMMIT;", NULL, NULL, NULL); g_string_free(timebuf, TRUE); g_string_free(buf, TRUE); + + if (empty) + return (SMSD_OUTBOXEMPTY); + else + return (SMSD_OK); }