Author: duncan
Date: Tue Oct 31 15:26:22 2006
New Revision: 8529
Modified:
branches/rel-1-6/freevo/src/helpers/recordserver.py
Log:
Added locking around all xmlrpc calls, this should stop any race conditions
Modified: branches/rel-1-6/freevo/src/helpers/recordserver.py
==============================================================================
--- branches/rel-1-6/freevo/src/helpers/recordserver.py (original)
+++ branches/rel-1-6/freevo/src/helpers/recordserver.py Tue Oct 31 15:26:22 2006
@@ -746,7 +746,7 @@
#################################################################
def xmlrpc_isPlayerRunning(self):
- (status, message) = (FALSE, 'isPlayerRunning failed')
+ (status, message) = (FALSE, 'RecordServer::isPlayerRunning: cannot
acquire lock')
try:
self.lock.acquire()
status = self.isPlayerRunning()
@@ -756,7 +756,7 @@
return (status, message)
def xmlrpc_isRecording(self):
- (status, message) = (FALSE, 'isRecording failed')
+ (status, message) = (FALSE, 'RecordServer::isRecording: cannot acquire
lock')
try:
status = self.isRecording()
message = status and 'is recording' or 'is not recording'
@@ -765,7 +765,7 @@
return (status, message)
def xmlrpc_findNextProgram(self):
- (status, message) = (FALSE, 'findNextProgram failed')
+ (status, message) = (FALSE, 'RecordServer::findNextProgram: cannot
acquire lock')
try:
self.lock.acquire()
response = self.findNextProgram()
@@ -776,7 +776,7 @@
return (status, message)
def xmlrpc_getScheduledRecordings(self):
- (status, message) = (FALSE, 'isPlayerRunning failed')
+ (status, message) = (FALSE, 'RecordServer::getScheduledRecordings:
cannot acquire lock')
try:
self.lock.acquire()
return (TRUE, jellyToXML(self.getScheduledRecordings()))
@@ -786,7 +786,7 @@
def xmlrpc_saveScheduledRecordings(self, scheduledRecordings=None):
- (status, message) = (FALSE, 'saveScheduledRecordings failed')
+ (status, message) = (FALSE, 'RecordServer::saveScheduledRecordings:
cannot acquire lock')
try:
self.lock.acquire()
status = self.saveScheduledRecordings(scheduledRecordings)
@@ -800,132 +800,204 @@
if not prog:
return (FALSE, 'RecordServer::scheduleRecording: no prog')
- prog = unjellyFromXML(prog)
-
- (status, response) = self.scheduleRecording(prog)
-
- return (status, 'RecordServer::scheduleRecording: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::scheduleRecording: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ prog = unjellyFromXML(prog)
+ (status, response) = self.scheduleRecording(prog)
+ message = 'RecordServer::scheduleRecording: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_removeScheduledRecording(self, prog=None):
if not prog:
return (FALSE, 'RecordServer::removeScheduledRecording: no prog')
- prog = unjellyFromXML(prog)
-
- (status, response) = self.removeScheduledRecording(prog)
-
- return (status, 'RecordServer::removeScheduledRecording: %s' %
response)
+ (status, message) = (FALSE, 'RecordServer::removeScheduledRecording:
cannot acquire lock')
+ try:
+ self.lock.acquire()
+ prog = unjellyFromXML(prog)
+ (status, response) = self.removeScheduledRecording(prog)
+ message = 'RecordServer::removeScheduledRecording: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_isProgScheduled(self, prog=None, schedule=None):
if not prog:
return (FALSE, 'removeScheduledRecording::failure: no prog')
- prog = unjellyFromXML(prog)
-
- if schedule:
- schedule = unjellyFromXML(schedule)
-
- (status, response) = self.isProgScheduled(prog, schedule)
-
- return (status, 'RecordServer::isProgScheduled: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::removeScheduledRecording:
cannot acquire lock')
+ try:
+ self.lock.acquire()
+ prog = unjellyFromXML(prog)
+ if schedule:
+ schedule = unjellyFromXML(schedule)
+ (status, response) = self.isProgScheduled(prog, schedule)
+ message = 'RecordServer::isProgScheduled: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_findProg(self, chan, start):
- (status, response) = self.findProg(chan, start)
-
- if status:
- return (status, jellyToXML(response))
- else:
- return (status, 'RecordServer::findProg: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::findProg: cannot acquire
lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.findProg(chan, start)
+ message = status and jellyToXML(response) or
('RecordServer::findProg: %s' % response)
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_findMatches(self, find, movies_only):
- (status, response) = self.findMatches(find, movies_only)
-
- if status:
- return (status, jellyToXML(response))
- else:
- return (status, 'RecordServer::findMatches: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::findMatches: cannot acquire
lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.findMatches(find, movies_only)
+ message = status and jellyToXML(response) or
('RecordServer::findMatches: %s' % response)
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_echotest(self, blah):
- return (TRUE, 'RecordServer::echotest: %s' % blah)
+ (status, message) = (FALSE, 'RecordServer::echotest: cannot acquire
lock')
+ try:
+ self.lock.acquire()
+ (status, message) = (TRUE, 'RecordServer::echotest: %s' % blah)
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_addFavorite(self, name, prog, exactchan=FALSE, exactdow=FALSE,
exacttod=FALSE):
- prog = unjellyFromXML(prog)
- (status, response) = self.addFavorite(name, prog, exactchan, exactdow,
exacttod)
-
- return (status, 'RecordServer::addFavorite: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::addFavorite: cannot acquire
lock')
+ try:
+ self.lock.acquire()
+ prog = unjellyFromXML(prog)
+ (status, response) = self.addFavorite(name, prog, exactchan,
exactdow, exacttod)
+ message = 'RecordServer::addFavorite: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_addEditedFavorite(self, name, title, chan, dow, mod, priority):
- (status, response) = \
- self.addEditedFavorite(unjellyFromXML(name), \
+ (status, message) = (FALSE, 'RecordServer::addEditedFavorite: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.addEditedFavorite(unjellyFromXML(name), \
unjellyFromXML(title), chan, dow, mod, priority)
-
- return (status, 'RecordServer::addEditedFavorite: %s' % response)
+ message = 'RecordServer::addEditedFavorite: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_removeFavorite(self, name=None):
- (status, response) = self.removeFavorite(name)
-
- return (status, 'RecordServer::removeFavorite: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::removeFavorite: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.removeFavorite(name)
+ message = 'RecordServer::removeFavorite: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_clearFavorites(self):
- (status, response) = self.clearFavorites()
-
- return (status, 'RecordServer::clearFavorites: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::clearFavorites: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.clearFavorites()
+ message = 'RecordServer::clearFavorites: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_getFavorites(self):
- return (TRUE, jellyToXML(self.getScheduledRecordings().getFavorites()))
+ (status, message) = (FALSE, 'RecordServer::getFavorites: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ (status, message) = (TRUE,
jellyToXML(self.getScheduledRecordings().getFavorites()))
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_getFavorite(self, name):
- (status, response) = self.getFavorite(name)
-
- if status:
- return (status, jellyToXML(response))
- else:
- return (status, 'RecordServer::getFavorite: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::getFavorite: cannot acquire
lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.getFavorite(name)
+ message = status and jellyToXML(response) or
'RecordServer::getFavorite: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_adjustPriority(self, favname, mod=0):
- (status, response) = self.adjustPriority(favname, mod)
-
- return (status, 'RecordServer::adjustPriority: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::adjustPriority: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.adjustPriority(favname, mod)
+ message = 'RecordServer::adjustPriority: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_isProgAFavorite(self, prog, favs=None):
- prog = unjellyFromXML(prog)
- if favs:
- favs = unjellyFromXML(favs)
-
- (status, response) = self.isProgAFavorite(prog, favs)
-
- return (status, 'RecordServer::adjustPriority: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::adjustPriority: cannot
acquire lock')
+ try:
+ self.lock.acquire()
+ prog = unjellyFromXML(prog)
+ if favs:
+ favs = unjellyFromXML(favs)
+ (status, response) = self.isProgAFavorite(prog, favs)
+ message = 'RecordServer::adjustPriority: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_removeFavoriteFromSchedule(self, fav):
- (status, response) = self.removeFavoriteFromSchedule(fav)
-
- return (status, 'RecordServer::removeFavoriteFromSchedule: %s' %
response)
+ (status, message) = (FALSE, 'RecordServer::removeFavoriteFromSchedule:
cannot acquire lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.removeFavoriteFromSchedule(fav)
+ message = 'RecordServer::removeFavoriteFromSchedule: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_addFavoriteToSchedule(self, fav):
- (status, response) = self.addFavoriteToSchedule(fav)
-
- return (status, 'RecordServer::addFavoriteToSchedule: %s' % response)
+ (status, message) = (FALSE, 'RecordServer::addFavoriteToSchedule:
cannot acquire lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.addFavoriteToSchedule(fav)
+ message = 'RecordServer::addFavoriteToSchedule: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
def xmlrpc_updateFavoritesSchedule(self):
- (status, response) = self.updateFavoritesSchedule()
-
- return (status, 'RecordServer::updateFavoritesSchedule: %s' % response)
+ (status, message) = (FALSE, 'updateFavoritesSchedule: cannot acquire
lock')
+ try:
+ self.lock.acquire()
+ (status, response) = self.updateFavoritesSchedule()
+ message = 'RecordServer::updateFavoritesSchedule: %s' % response
+ finally:
+ self.lock.release()
+ return (status, message)
#################################################################
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog