- Applied pycups patch from git.
This commit is contained in:
parent
91ce36f72d
commit
99ea333f7b
208
pycups-git-master.patch
Normal file
208
pycups-git-master.patch
Normal file
@ -0,0 +1,208 @@
|
||||
diff -U0 pycups-1.9.42/ChangeLog.git-master pycups-1.9.42/ChangeLog
|
||||
--- pycups-1.9.42/ChangeLog.git-master 2008-08-29 09:56:45.000000000 +0100
|
||||
+++ pycups-1.9.42/ChangeLog 2008-11-12 17:30:17.000000000 +0000
|
||||
@@ -0,0 +1,12 @@
|
||||
+2008-11-12 Tim Waugh <twaugh@redhat.com>
|
||||
+
|
||||
+ * cupsconnection.c (Connection): Store thread state in Connection
|
||||
+ data.
|
||||
+ (Connection_begin_allow_threads): Save current thread state.
|
||||
+ (Connection_end_allow_threads): Restore current thread state.
|
||||
+ (Connection_init): Use new functions.
|
||||
+ (Connection_getPPDs): Likewise.
|
||||
+ (Connection_getServerPPD): Likewise.
|
||||
+ (Connection_getDocument): Likewise.
|
||||
+ (Connection_getDevices): Likewise.
|
||||
+
|
||||
diff -up pycups-1.9.42/cupsconnection.c.git-master pycups-1.9.42/cupsconnection.c
|
||||
--- pycups-1.9.42/cupsconnection.c.git-master 2008-08-29 09:56:45.000000000 +0100
|
||||
+++ pycups-1.9.42/cupsconnection.c 2008-11-12 17:30:17.000000000 +0000
|
||||
@@ -41,6 +41,7 @@ typedef struct
|
||||
PyObject_HEAD
|
||||
http_t *http;
|
||||
char *host; /* for repr */
|
||||
+ PyThreadState *tstate;
|
||||
} Connection;
|
||||
|
||||
typedef struct
|
||||
@@ -143,6 +144,7 @@ Connection_new (PyTypeObject *type, PyOb
|
||||
if (self != NULL) {
|
||||
self->http = NULL;
|
||||
self->host = NULL;
|
||||
+ self->tstate = NULL;
|
||||
}
|
||||
|
||||
return (PyObject *) self;
|
||||
@@ -167,10 +169,10 @@ Connection_init (Connection *self, PyObj
|
||||
return -1;
|
||||
}
|
||||
|
||||
- Py_BEGIN_ALLOW_THREADS;
|
||||
+ Connection_begin_allow_threads (self);
|
||||
debugprintf ("httpConnectEncrypt(...)\n");
|
||||
self->http = httpConnectEncrypt (host, port, (http_encryption_t) encryption);
|
||||
- Py_END_ALLOW_THREADS;
|
||||
+ Connection_end_allow_threads (self);
|
||||
|
||||
if (!self->http) {
|
||||
PyErr_SetString (PyExc_RuntimeError, "httpConnectionEncrypt failed");
|
||||
@@ -201,6 +203,30 @@ Connection_repr (Connection *self)
|
||||
self->host, self);
|
||||
}
|
||||
|
||||
+void
|
||||
+Connection_begin_allow_threads (void *connection)
|
||||
+{
|
||||
+ Connection *self = (Connection *) connection;
|
||||
+ if (!self || !self->tstate)
|
||||
+ return;
|
||||
+
|
||||
+ debugprintf ("begin allow threads\n");
|
||||
+ g_current_connection = connection;
|
||||
+ self->tstate = PyEval_SaveThread ();
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+Connection_end_allow_threads (void *connection)
|
||||
+{
|
||||
+ Connection *self = (Connection *) connection;
|
||||
+ if (!self || !self->tstate)
|
||||
+ return;
|
||||
+
|
||||
+ debugprintf ("end allow threads\n");
|
||||
+ PyEval_RestoreThread (self->tstate);
|
||||
+ self->tstate = NULL;
|
||||
+}
|
||||
+
|
||||
////////////////
|
||||
// Connection // METHODS
|
||||
////////////////
|
||||
@@ -632,9 +658,9 @@ Connection_getPPDs (Connection *self)
|
||||
|
||||
debugprintf ("-> Connection_getPPDs()\n");
|
||||
debugprintf ("cupsDoRequest(\"/\")\n");
|
||||
- Py_BEGIN_ALLOW_THREADS;
|
||||
+ Connection_begin_allow_threads (self);
|
||||
answer = cupsDoRequest (self->http, request, "/");
|
||||
- Py_END_ALLOW_THREADS;
|
||||
+ Connection_end_allow_threads (self);
|
||||
if (!answer || answer->request.status.status_code > IPP_OK_CONFLICT) {
|
||||
set_ipp_error (answer ?
|
||||
answer->request.status.status_code :
|
||||
@@ -700,9 +726,9 @@ Connection_getServerPPD (Connection *sel
|
||||
if (!PyArg_ParseTuple (args, "s", &ppd_name))
|
||||
return NULL;
|
||||
debugprintf ("-> Connection_getServerPPD()\n");
|
||||
- Py_BEGIN_ALLOW_THREADS;
|
||||
+ Connection_begin_allow_threads (self);
|
||||
filename = cupsGetServerPPD (self->http, ppd_name);
|
||||
- Py_END_ALLOW_THREADS;
|
||||
+ Connection_end_allow_threads (self);
|
||||
if (!filename) {
|
||||
set_ipp_error (cupsLastError ());
|
||||
debugprintf ("<- Connection_getServerPPD() (error)\n");
|
||||
@@ -759,9 +785,9 @@ Connection_getDocument (Connection *self
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- Py_BEGIN_ALLOW_THREADS;
|
||||
+ Connection_begin_allow_threads (self);
|
||||
answer = cupsDoIORequest (self->http, request, "/", -1, fd);
|
||||
- Py_END_ALLOW_THREADS;
|
||||
+ Connection_end_allow_threads (self);
|
||||
|
||||
close (fd);
|
||||
if (!answer || answer->request.status.status_code > IPP_OK_CONFLICT) {
|
||||
@@ -823,9 +849,9 @@ Connection_getDevices (Connection *self)
|
||||
|
||||
debugprintf ("-> Connection_getDevices()\n");
|
||||
debugprintf ("cupsDoRequest(\"/\")\n");
|
||||
- Py_BEGIN_ALLOW_THREADS;
|
||||
+ Connection_begin_allow_threads (self);
|
||||
answer = cupsDoRequest (self->http, request, "/");
|
||||
- Py_END_ALLOW_THREADS;
|
||||
+ Connection_end_allow_threads (self);
|
||||
if (!answer || answer->request.status.status_code > IPP_OK_CONFLICT) {
|
||||
set_ipp_error (answer ?
|
||||
answer->request.status.status_code :
|
||||
diff -up pycups-1.9.42/cupsconnection.h.git-master pycups-1.9.42/cupsconnection.h
|
||||
--- pycups-1.9.42/cupsconnection.h.git-master 2008-07-05 18:19:02.000000000 +0100
|
||||
+++ pycups-1.9.42/cupsconnection.h 2008-11-12 17:30:17.000000000 +0000
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* cups - Python bindings for CUPS
|
||||
- * Copyright (C) 2002, 2005, 2006 Tim Waugh <twaugh@redhat.com>
|
||||
+ * Copyright (C) 2002, 2005, 2006, 2008 Tim Waugh <twaugh@redhat.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -29,4 +29,6 @@ extern PyTypeObject cups_DestType;
|
||||
extern PyObject *HTTPError;
|
||||
extern PyObject *IPPError;
|
||||
|
||||
+void Connection_begin_allow_threads (void *connection);
|
||||
+void Connection_end_allow_threads (void *connection);
|
||||
#endif /* HAVE_CUPSCONNECTION_H */
|
||||
diff -up pycups-1.9.42/cupsmodule.c.git-master pycups-1.9.42/cupsmodule.c
|
||||
--- pycups-1.9.42/cupsmodule.c.git-master 2008-07-05 18:19:02.000000000 +0100
|
||||
+++ pycups-1.9.42/cupsmodule.c 2008-11-12 17:30:17.000000000 +0000
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "cupsppd.h"
|
||||
|
||||
static PyObject *cups_password_callback = NULL;
|
||||
+void *g_current_connection = NULL;
|
||||
|
||||
//////////////////////
|
||||
// Worker functions //
|
||||
@@ -105,11 +106,17 @@ do_password_callback (const char *prompt
|
||||
PyObject *result;
|
||||
const char *pwval;
|
||||
|
||||
+ debugprintf ("-> do_password_callback\n");
|
||||
+ Connection_end_allow_threads (g_current_connection);
|
||||
args = Py_BuildValue ("(s)", prompt);
|
||||
result = PyEval_CallObject (cups_password_callback, args);
|
||||
Py_DECREF (args);
|
||||
if (result == NULL)
|
||||
+ {
|
||||
+ debugprintf ("<- do_password_callback (empty string)\n");
|
||||
+ Connection_begin_allow_threads (g_current_connection);
|
||||
return "";
|
||||
+ }
|
||||
|
||||
if (password) {
|
||||
free (password);
|
||||
@@ -120,8 +127,14 @@ do_password_callback (const char *prompt
|
||||
password = strdup (pwval);
|
||||
Py_DECREF (result);
|
||||
if (!password)
|
||||
+ {
|
||||
+ debugprintf ("<- do_password_callback (empty string)\n");
|
||||
+ Connection_begin_allow_threads (g_current_connection);
|
||||
return "";
|
||||
-
|
||||
+ }
|
||||
+
|
||||
+ Connection_begin_allow_threads (g_current_connection);
|
||||
+ debugprintf ("<- do_password_callback\n");
|
||||
return password;
|
||||
}
|
||||
|
||||
diff -up pycups-1.9.42/cupsmodule.h.git-master pycups-1.9.42/cupsmodule.h
|
||||
--- pycups-1.9.42/cupsmodule.h.git-master 2008-07-05 18:19:02.000000000 +0100
|
||||
+++ pycups-1.9.42/cupsmodule.h 2008-11-12 17:30:17.000000000 +0000
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* cups - Python bindings for CUPS
|
||||
- * Copyright (C) 2006, 2007 Tim Waugh <twaugh@redhat.com>
|
||||
+ * Copyright (C) 2006, 2007, 2008 Tim Waugh <twaugh@redhat.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -53,4 +53,6 @@ extern void debugprintf (const char *fmt
|
||||
#error pycups requires CUPS 1.2.x
|
||||
#endif
|
||||
|
||||
+extern void *g_current_connection;
|
||||
+
|
||||
#endif /* HAVE_CUPSMODULE_H */
|
@ -14,6 +14,7 @@ Group: System Environment/Base
|
||||
Source0: http://cyberelk.net/tim/data/system-config-printer/1.0.x/system-config-printer-%{version}.tar.bz2
|
||||
Source1: http://cyberelk.net/tim/data/pycups/pycups-%{pycups_version}.tar.bz2
|
||||
Source2: http://cyberelk.net/tim/data/pysmbc/pysmbc-%{pysmbc_version}.tar.bz2
|
||||
Patch0: pycups-git-master.patch
|
||||
|
||||
BuildRequires: cups-devel >= 1.2
|
||||
BuildRequires: python-devel >= 2.4
|
||||
@ -61,6 +62,10 @@ the configuration tool.
|
||||
%prep
|
||||
%setup -q -a 1 -a 2
|
||||
|
||||
pushd pycups-%{pycups_version}
|
||||
%patch0 -p1 -b .git-master
|
||||
popd
|
||||
|
||||
%build
|
||||
%configure
|
||||
|
||||
@ -149,6 +154,9 @@ rm -rf %buildroot
|
||||
exit 0
|
||||
|
||||
%changelog
|
||||
* Wed Nov 12 2008 Tim Waugh <twaugh@redhat.com>
|
||||
- Applied pycups patch from git.
|
||||
|
||||
* Tue Oct 21 2008 Tim Waugh <twaugh@redhat.com> 1.0.9-1
|
||||
- Updated to 1.0.9 for translations.
|
||||
- Updated pysmbc to 1.0.6. No longer need pysmbc-git patch.
|
||||
|
Loading…
Reference in New Issue
Block a user