Ignore:
Timestamp:
2014-07-13T17:25:15Z (10 years ago)
Author:
Agnieszka Tabaka <nufcia@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7493e7b
Parents:
b8e75319 (diff), 78192cc7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/compositor/compositor.c

    rb8e75319 raf2a76c  
    5555#include <async.h>
    5656#include <loc.h>
    57 #include <devman.h>
    5857
    5958#include <event.h>
    60 #include <graph_iface.h>
    6159#include <io/keycode.h>
    6260#include <io/mode.h>
     
    11491147}
    11501148
    1151 static async_sess_t *vsl_connect(const char *svc)
     1149static async_sess_t *vsl_connect(service_id_t sid, const char *svc)
    11521150{
    11531151        int rc;
    11541152        async_sess_t *sess;
    1155         service_id_t dsid;
    1156         devman_handle_t handle;
    1157 
    1158         rc = loc_service_get_id(svc, &dsid, 0);
    1159         if (rc != EOK) {
     1153
     1154        sess = loc_service_connect(EXCHANGE_SERIALIZE, sid, 0);
     1155        if (sess == NULL) {
     1156                printf("%s: Unable to connect to visualizer %s\n", NAME, svc);
    11601157                return NULL;
    11611158        }
    11621159
    1163         rc = devman_fun_sid_to_handle(dsid, &handle);
    1164         if (rc == EOK) {
    1165                 sess = devman_device_connect(EXCHANGE_SERIALIZE, handle, 0);
    1166                 if (sess == NULL) {
    1167                         printf("%s: Unable to connect to visualizer %s\n", NAME, svc);
    1168                         return NULL;
    1169                 }
    1170                 rc = graph_dev_connect(sess);
    1171                 if (rc != EOK) {
    1172                         return NULL;
    1173                 }
    1174         } else if (rc == ENOENT) {
    1175                 sess = loc_service_connect(EXCHANGE_SERIALIZE, dsid, 0);
    1176                 if (sess == NULL) {
    1177                         printf("%s: Unable to connect to visualizer %s\n", NAME, svc);
    1178                         return NULL;
    1179                 }
    1180         } else {
    1181                 return NULL;
    1182         }
    1183 
    11841160        async_exch_t *exch = async_exchange_begin(sess);
    1185         rc = async_connect_to_me(exch, dsid, 0, 0, vsl_notifications, NULL);
     1161        rc = async_connect_to_me(exch, sid, 0, 0, vsl_notifications, NULL);
    11861162        async_exchange_end(exch);
    11871163
     
    11961172}
    11971173
    1198 static viewport_t *viewport_create(const char *vsl_name)
     1174static viewport_t *viewport_create(service_id_t sid)
    11991175{
    12001176        int rc;
    1201 
    1202         viewport_t *vp = (viewport_t *) malloc(sizeof(viewport_t));
    1203         if (!vp) {
    1204                 return NULL;
    1205         }
     1177        char *vsl_name = NULL;
     1178        viewport_t *vp = NULL;
     1179        bool claimed = false;
     1180
     1181        rc = loc_service_get_name(sid, &vsl_name);
     1182        if (rc != EOK)
     1183                goto error;
     1184
     1185        vp = (viewport_t *) calloc(1, sizeof(viewport_t));
     1186        if (!vp)
     1187                goto error;
    12061188
    12071189        link_initialize(&vp->link);
     
    12101192
    12111193        /* Establish output bidirectional connection. */
    1212         vp->sess = vsl_connect(vsl_name);
    1213         rc = loc_service_get_id(vsl_name, &vp->dsid, 0);
    1214         if (vp->sess == NULL || rc != EOK) {
    1215                 free(vp);
    1216                 return NULL;
    1217         }
     1194        vp->dsid = sid;
     1195        vp->sess = vsl_connect(sid, vsl_name);
     1196        if (vp->sess == NULL)
     1197                goto error;
    12181198
    12191199        /* Claim the given visualizer. */
    12201200        rc = visualizer_claim(vp->sess, 0);
    12211201        if (rc != EOK) {
    1222                 async_hangup(vp->sess);
    1223                 free(vp);
    12241202                printf("%s: Unable to claim visualizer (%s)\n", NAME, str_error(rc));
    1225                 return NULL;
    1226         }
     1203                goto error;
     1204        }
     1205
     1206        claimed = true;
    12271207
    12281208        /* Retrieve the default mode. */
    12291209        rc = visualizer_get_default_mode(vp->sess, &vp->mode);
    12301210        if (rc != EOK) {
    1231                 visualizer_yield(vp->sess);
    1232                 async_hangup(vp->sess);
    1233                 free(vp);
    12341211                printf("%s: Unable to retrieve mode (%s)\n", NAME, str_error(rc));
    1235                 return NULL;
     1212                goto error;
    12361213        }
    12371214
     
    12401217            NULL, SURFACE_FLAG_SHARED);
    12411218        if (vp->surface == NULL) {
    1242                 visualizer_yield(vp->sess);
    1243                 async_hangup(vp->sess);
    1244                 free(vp);
    12451219                printf("%s: Unable to create surface (%s)\n", NAME, str_error(rc));
    1246                 return NULL;
     1220                goto error;
    12471221        }
    12481222
     
    12511225                vp->mode.index, vp->mode.version, surface_direct_access(vp->surface));
    12521226        if (rc != EOK) {
     1227                printf("%s: Unable to set mode (%s)\n", NAME, str_error(rc));
     1228                goto error;
     1229        }
     1230
     1231        return vp;
     1232error:
     1233        if (claimed)
    12531234                visualizer_yield(vp->sess);
    1254                 surface_destroy(vp->surface);
     1235        if (vp->sess != NULL)
    12551236                async_hangup(vp->sess);
    1256                 free(vp);
    1257                 printf("%s: Unable to set mode (%s)\n", NAME, str_error(rc));
    1258                 return NULL;
    1259         }
    1260 
    1261         return vp;
     1237        free(vp);
     1238        free(vsl_name);
     1239        return NULL;
    12621240}
    12631241
     
    21902168                        continue;
    21912169               
    2192                 char *svc_name;
    2193                 rc = loc_service_get_name(svcs[i], &svc_name);
    2194                 if (rc == EOK) {
    2195                         viewport_t *vp = viewport_create(svc_name);
    2196                         if (vp != NULL) {
    2197                                 list_append(&vp->link, &viewport_list);
    2198                         }
    2199                 }
     2170                viewport_t *vp = viewport_create(svcs[i]);
     2171                if (vp != NULL)
     2172                        list_append(&vp->link, &viewport_list);
    22002173        }
    22012174        fibril_mutex_unlock(&viewport_list_mtx);
Note: See TracChangeset for help on using the changeset viewer.